public JaggedArraySerializer(TypeSerializationMetadata typeMetadata) : base(typeMetadata) { if (typeMetadata != null) { if (!typeMetadata.cSharpType.GetElementType().IsArray) { throw new SerializationException($"Cannot convert {typeMetadata.udonStorageType} to {typeMetadata.cSharpType}"); } if (typeMetadata.arrayElementMetadata == null) { throw new ArgumentException("Array element metadata cannot be null on array type metadata"); } rootArraySerializer = CreatePooled(new TypeSerializationMetadata(typeMetadata.arrayElementMetadata.cSharpType.MakeArrayType()) { arrayElementMetadata = typeMetadata.arrayElementMetadata }); int arrayDepth = 0; System.Type arrayType = typeMetadata.cSharpType; while (arrayType.IsArray) { arrayDepth++; arrayType = arrayType.GetElementType(); } if (arrayDepth <= 1) { throw new SerializationException("Jagged array serializer must run on jagged arrays."); } } }
public static Serializer CreatePooled(System.Type type) { lookupPooledTypeData.SetToType(type); Serializer serializer; if (!typeSerializerDictionary.TryGetValue(lookupPooledTypeData, out serializer)) { TypeSerializationMetadata typeMetadata = new TypeSerializationMetadata(type); serializer = Create(typeMetadata); typeSerializerDictionary.Add(typeMetadata, serializer); } return(serializer); }
public void SetToType(System.Type type) { cSharpType = type; if (cSharpType != null && cSharpType.IsArray) { System.Type elementType = cSharpType; while (elementType.IsArray) { elementType = elementType.GetElementType(); } arrayElementMetadata = new TypeSerializationMetadata(elementType); } udonStorageType = UdonSharpUtils.UserTypeToUdonType(cSharpType); }
private static Serializer Create(TypeSerializationMetadata typeMetadata) { if (typeMetadata == null) { throw new System.ArgumentException("Type metadata cannot be null for serializer creation"); } foreach (Serializer checkSerializer in _typeCheckSerializers) { if (checkSerializer.HandlesTypeSerialization(typeMetadata)) { return(checkSerializer.MakeSerializer(typeMetadata)); } } throw new System.Exception($"Failed to initialize a valid serializer for {typeMetadata}"); }
public static Serializer CreatePooled(TypeSerializationMetadata typeMetadata) { if (typeMetadata == null) { throw new System.ArgumentException("Type metadata cannot be null for serializer creation"); } Serializer serializer; if (!typeSerializerDictionary.TryGetValue(typeMetadata, out serializer)) { serializer = Create(typeMetadata); typeSerializerDictionary.Add(typeMetadata, serializer); } return(serializer); }
public static Serializer CreatePooled(System.Type type) { Serializer serializer; lock (_pooledSerializerLock) { _lookupPooledTypeData.SetToType(type); if (!_typeSerializerDictionary.TryGetValue(_lookupPooledTypeData, out serializer)) { TypeSerializationMetadata typeMetadata = new TypeSerializationMetadata(type); serializer = Create(typeMetadata); _typeSerializerDictionary.Add(typeMetadata, serializer); } } return(serializer); }
public ArraySerializer(TypeSerializationMetadata typeMetadata) : base(typeMetadata) { if (typeMetadata != null) { if (typeMetadata.arrayElementMetadata == null) { throw new ArgumentException("Array element metadata cannot be null on array type metadata"); } elementSerializer = (Serializer <T>)CreatePooled(typeMetadata.arrayElementMetadata); // If using the default serializer, we can just copy the array without iterating through each element. if (elementSerializer is DefaultSerializer <T> ) { elementSerializer = null; } } }
/// <summary> /// Returns true if this serializer should be used for a given type, returns false otherwise. /// </summary> /// <param name="typeMetadata"></param> /// <returns></returns> public abstract bool HandlesTypeSerialization(TypeSerializationMetadata typeMetadata);
public UdonSharpBehaviourSerializer(TypeSerializationMetadata typeMetadata) : base(typeMetadata) { }
public SystemObjectSerializer(TypeSerializationMetadata typeMetadata) : base(typeMetadata) { }
public override bool HandlesTypeSerialization(TypeSerializationMetadata typeMetadata) { VerifyTypeCheckSanity(); return(typeMetadata.cSharpType == typeof(object)); }
public UnityObjectSerializer(TypeSerializationMetadata typeMetadata) : base(typeMetadata) { }
protected override bool HandlesTypeSerialization(TypeSerializationMetadata typeMetadata) { VerifyTypeCheckSanity(); return(typeMetadata.cSharpType == typeof(UdonSharpBehaviour)); }
public UserEnumSerializer(TypeSerializationMetadata typeMetadata) : base(typeMetadata) { }
public override bool HandlesTypeSerialization(TypeSerializationMetadata typeMetadata) { VerifyTypeCheckSanity(); return(typeMetadata.cSharpType == typeof(UnityEngine.Object) || typeMetadata.cSharpType.IsSubclassOf(typeof(UnityEngine.Object))); }
public override bool HandlesTypeSerialization(TypeSerializationMetadata typeMetadata) { VerifyTypeCheckSanity(); return(typeMetadata.cSharpType.IsArray && !typeMetadata.cSharpType.GetElementType().IsArray); }
public override bool HandlesTypeSerialization(TypeSerializationMetadata typeMetadata) { return(typeMetadata.cSharpType == typeof(UdonSharpBehaviour) || typeMetadata.cSharpType.IsSubclassOf(typeof(UdonSharpBehaviour))); }
protected abstract Serializer MakeSerializer(TypeSerializationMetadata typeMetadata);
protected Serializer(TypeSerializationMetadata typeMetadata) { this.typeMetadata = typeMetadata; }
/// <summary> /// Returns true if this serializer should be used for a given type, returns false otherwise. /// </summary> /// <param name="typeMetadata"></param> /// <returns></returns> protected abstract bool HandlesTypeSerialization(TypeSerializationMetadata typeMetadata);
protected override bool HandlesTypeSerialization(TypeSerializationMetadata typeMetadata) { VerifyTypeCheckSanity(); return(true); }
public DefaultSerializer(TypeSerializationMetadata typeMetadata) : base(typeMetadata) { }
protected override Serializer MakeSerializer(TypeSerializationMetadata typeMetadata) { VerifyTypeCheckSanity(); return((Serializer)System.Activator.CreateInstance(typeof(ArraySerializer <>).MakeGenericType(typeMetadata.cSharpType.GetElementType()), typeMetadata)); }
protected override bool HandlesTypeSerialization(TypeSerializationMetadata typeMetadata) { VerifyTypeCheckSanity(); return(typeMetadata.cSharpType.IsEnum && !CompilerUdonInterface.IsExternType(typeMetadata.cSharpType)); }