using System; using System.Reflection; using System.Runtime.InteropServices; using UnityEngine; namespace UnityEditor.Build.Pipeline.Utilities.USerialize { // Data types that USerialize can emit to the stream internal enum DataType { Byte, Bool, Int, UInt, Long, ULong, String, Class, Struct, Enum, Array, List, Custom, Type, Guid, Hash128, Invalid } // Custom serializers can be provided by the client code to implement serialization for types that cannot be adequately handled by the generic reflection based code // A custom serializer is a class that implements this ICustomSerializer interface to provide functions to serialize data for a type to the stream and recreate an instance of the type from a serialized data stream // Client code can pass an array of custom serializers and their associated types to the Serializer/Deserializer constructor or can call AddCustomSerializer() to add individual custom serializers at any time prior to serialization taking place internal interface ICustomSerializer { // Return the type that this custom serializer deals with Type GetType(); // Serializer function to convert an instance of the type into a serialized stream. void USerializer(Serializer serializer, object value); // Deserializer function to create an instance of the type from a previously serialized stream object UDeSerializer(DeSerializer deserializer); } internal static class USerialize { // Reserved value for string indices representing an invalid string index, maximum value that can be written by Serializer.WriteStringIndex() or read by DeSerializer.ReadStringIndex() internal const int InvalidStringIndex = int.MaxValue; } }