using System;
using System.ComponentModel;
namespace ProtoBuf
{
    /// Specifies a method on the root-contract in an hierarchy to be invoked before serialization.
    [AttributeUsage(AttributeTargets.Method, AllowMultiple = false, Inherited = false)]
#if !CF && !PORTABLE && !COREFX && !PROFILE259
    [ImmutableObject(true)]
#endif
    public sealed class ProtoBeforeSerializationAttribute : Attribute { }
    /// Specifies a method on the root-contract in an hierarchy to be invoked after serialization.
    [AttributeUsage(AttributeTargets.Method, AllowMultiple = false, Inherited = false)]
#if !CF && !PORTABLE && !COREFX && !PROFILE259
    [ImmutableObject(true)]
#endif
    public sealed class ProtoAfterSerializationAttribute : Attribute { }
    /// Specifies a method on the root-contract in an hierarchy to be invoked before deserialization.
    [AttributeUsage(AttributeTargets.Method, AllowMultiple = false, Inherited = false)]
#if !CF && !PORTABLE && !COREFX && !PROFILE259
    [ImmutableObject(true)]
#endif
    public sealed class ProtoBeforeDeserializationAttribute : Attribute { }
    /// Specifies a method on the root-contract in an hierarchy to be invoked after deserialization.
    [AttributeUsage(AttributeTargets.Method, AllowMultiple = false, Inherited = false)]
#if !CF && !PORTABLE && !COREFX && !PROFILE259
    [ImmutableObject(true)]
#endif
    public sealed class ProtoAfterDeserializationAttribute : Attribute { }
}