using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Net.Http;
using System.Threading;
using System.Threading.Tasks;
#nullable enable
namespace MemoryPack {
[AttributeUsage(AttributeTargets.Class | AttributeTargets.Struct | AttributeTargets.Interface, AllowMultiple = false, Inherited = false)]
public sealed class MemoryPackableAttribute : Attribute
{
public GenerateType GenerateType { get; }
public SerializeLayout SerializeLayout { get; }
// ctor parameter is parsed in MemoryPackGenerator.Parser TypeMeta for detect which ctor used in MemoryPack.Generator.
// if modify ctor, be careful.
///
/// [generateType, (VersionTolerant or CircularReference) ? SerializeLayout.Explicit : SerializeLayout.Sequential]
///
///
public MemoryPackableAttribute(GenerateType generateType = GenerateType.Object)
{
this.GenerateType = generateType;
this.SerializeLayout = (generateType == GenerateType.VersionTolerant || generateType == GenerateType.CircularReference)
? SerializeLayout.Explicit
: SerializeLayout.Sequential;
}
///
/// [GenerateType.Object, serializeLayout]
///
public MemoryPackableAttribute(SerializeLayout serializeLayout)
{
this.GenerateType = GenerateType.Object;
this.SerializeLayout = serializeLayout;
}
public MemoryPackableAttribute(GenerateType generateType, SerializeLayout serializeLayout)
{
this.GenerateType = generateType;
this.SerializeLayout = serializeLayout;
}
}
public enum GenerateType
{
Object,
VersionTolerant,
CircularReference,
Collection,
NoGenerate
}
public enum SerializeLayout
{
Sequential, // default
Explicit
}
[AttributeUsage(AttributeTargets.Class | AttributeTargets.Interface, AllowMultiple = true, Inherited = false)]
public sealed class MemoryPackUnionAttribute : Attribute
{
public ushort Tag { get; }
public Type Type { get; }
public MemoryPackUnionAttribute(ushort tag, Type type)
{
this.Tag = tag;
this.Type = type;
}
}
[AttributeUsage(AttributeTargets.Class, AllowMultiple = false, Inherited = false)]
public sealed class MemoryPackUnionFormatterAttribute : Attribute
{
public Type Type { get; }
public MemoryPackUnionFormatterAttribute(Type type)
{
this.Type = type;
}
}
[AttributeUsage(AttributeTargets.Field | AttributeTargets.Property, AllowMultiple = false, Inherited = false)]
public sealed class MemoryPackAllowSerializeAttribute : Attribute
{
}
[AttributeUsage(AttributeTargets.Field | AttributeTargets.Property, AllowMultiple = false, Inherited = false)]
public sealed class MemoryPackOrderAttribute : Attribute
{
public int Order { get; }
public MemoryPackOrderAttribute(int order)
{
this.Order = order;
}
}
#if !UNITY_2021_2_OR_NEWER
[AttributeUsage(AttributeTargets.Field | AttributeTargets.Property, AllowMultiple = false, Inherited = false)]
public abstract class MemoryPackCustomFormatterAttribute : Attribute
{
public abstract IMemoryPackFormatter GetFormatter();
}
[AttributeUsage(AttributeTargets.Field | AttributeTargets.Property, AllowMultiple = false, Inherited = false)]
public abstract class MemoryPackCustomFormatterAttribute : Attribute
where TFormatter : IMemoryPackFormatter
{
public abstract TFormatter GetFormatter();
}
#endif
// similar naming as System.Text.Json attribtues
// https://docs.microsoft.com/en-us/dotnet/api/system.text.json.serialization.jsonattribute
[AttributeUsage(AttributeTargets.Field | AttributeTargets.Property, AllowMultiple = false, Inherited = false)]
public sealed class MemoryPackIgnoreAttribute : Attribute
{
}
[AttributeUsage(AttributeTargets.Field | AttributeTargets.Property, AllowMultiple = false, Inherited = false)]
public sealed class MemoryPackIncludeAttribute : Attribute
{
}
[AttributeUsage(AttributeTargets.Constructor, AllowMultiple = false, Inherited = false)]
public sealed class MemoryPackConstructorAttribute : Attribute
{
}
[AttributeUsage(AttributeTargets.Method, AllowMultiple = false, Inherited = false)]
public sealed class MemoryPackOnSerializingAttribute : Attribute
{
}
[AttributeUsage(AttributeTargets.Method, AllowMultiple = false, Inherited = false)]
public sealed class MemoryPackOnSerializedAttribute : Attribute
{
}
[AttributeUsage(AttributeTargets.Method, AllowMultiple = false, Inherited = false)]
public sealed class MemoryPackOnDeserializingAttribute : Attribute
{
}
[AttributeUsage(AttributeTargets.Method, AllowMultiple = false, Inherited = false)]
public sealed class MemoryPackOnDeserializedAttribute : Attribute
{
}
// Others
[AttributeUsage(AttributeTargets.Class | AttributeTargets.Interface, AllowMultiple = false, Inherited = false)]
public sealed class GenerateTypeScriptAttribute : Attribute
{
}
}