DeserializationResult ITypeReader <EntityPrototype, ValueDataNode> .Read(
     ISerializationManager serializationManager, ValueDataNode node,
     IDependencyCollection dependencies,
     bool skipHook, ISerializationContext?context)
 {
     return(DeserializationResult.Value(new EntityPrototype(node.Value)));
 }
        DeserializationResult ITypeReader <Texture, ValueDataNode> .Read(ISerializationManager serializationManager,
                                                                         ValueDataNode node,
                                                                         IDependencyCollection dependencies,
                                                                         bool skipHook, ISerializationContext?context)
        {
            var path = serializationManager.ReadValueOrThrow <ResourcePath>(node, context, skipHook);

            return(DeserializationResult.Value(new Texture(path)));
        }
예제 #3
0
        public async ValueTask <DeserializationResult <TResult> > TryDeserializeAsync <TResult>(Stream stream)
        {
            try
            {
                var result = await JsonSerializer.DeserializeAsync <TResult>(stream, serializerOptions).ConfigureAwait(false);

                return(DeserializationResult <TResult> .Success(result));
            }
            catch (Exception ex)
            {
                return(DeserializationResult <TResult> .Failed(ex));
            }
        }
예제 #4
0
        public DeserializationResult Read(ISerializationManager serializationManager, MappingDataNode node,
                                          IDependencyCollection dependencies,
                                          bool skipHook,
                                          ISerializationContext?context = null)
        {
            if (node.Children.Count != 1)
            {
                throw new InvalidMappingException("Less than or more than 1 mappings provided to ValueTupleSerializer");
            }

            var entry = node.Children.First();
            var v1    = serializationManager.ReadValueOrThrow <T1>(entry.Key, context, skipHook);
            var v2    = serializationManager.ReadValueOrThrow <T2>(entry.Value, context, skipHook);

            return(DeserializationResult.Value(new ValueTuple <T1, T2>(v1, v2)));
        }
        DeserializationResult ITypeReader <Rsi, MappingDataNode> .Read(ISerializationManager serializationManager,
                                                                       MappingDataNode node,
                                                                       IDependencyCollection dependencies,
                                                                       bool skipHook, ISerializationContext?context)
        {
            if (!node.TryGet("sprite", out var pathNode))
            {
                throw new InvalidMappingException("Expected sprite-node");
            }

            if (!node.TryGet("state", out var stateNode) || stateNode is not ValueDataNode valueDataNode)
            {
                throw new InvalidMappingException("Expected state-node as a valuenode");
            }

            var path = serializationManager.ReadValueOrThrow <ResourcePath>(pathNode, context, skipHook);

            return(DeserializationResult.Value(new Rsi(path, valueDataNode.Value)));
        }
예제 #6
0
        private void ThrowOnWrongResult(DeserializationResult result)
        {
            switch (result)
            {
            case DeserializationResult.OK:
                return;

            case DeserializationResult.WrongMagic:
                throw new InvalidOperationException("Cound not find proper magic.");

            case DeserializationResult.WrongVersion:
                throw new InvalidOperationException("Could not deserialize data serialized with another version of serializer.");

            case DeserializationResult.StreamCorrupted:
                throw lastException;

            default:
                throw new ArgumentOutOfRangeException();
            }
        }
예제 #7
0
        public DeserializationResult Read(ISerializationManager serializationManager,
                                          SequenceDataNode node,
                                          IDependencyCollection dependencies,
                                          bool skipHook,
                                          ISerializationContext?context = null)
        {
            var factory    = dependencies.Resolve <IComponentFactory>();
            var components = new ComponentRegistry();
            var mappings   = new Dictionary <DeserializationResult, DeserializationResult>();

            foreach (var componentMapping in node.Sequence.Cast <MappingDataNode>())
            {
                string compType = ((ValueDataNode)componentMapping.Get("type")).Value;
                // See if type exists to detect errors.
                switch (factory.GetComponentAvailability(compType))
                {
                case ComponentAvailability.Available:
                    break;

                case ComponentAvailability.Ignore:
                    continue;

                case ComponentAvailability.Unknown:
                    Logger.ErrorS(SerializationManager.LogCategory, $"Unknown component '{compType}' in prototype!");
                    continue;
                }

                // Has this type already been added?
                if (components.Keys.Contains(compType))
                {
                    Logger.ErrorS(SerializationManager.LogCategory, $"Component of type '{compType}' defined twice in prototype!");
                    continue;
                }

                var copy = componentMapping.Copy() !;
                copy.Remove("type");

                var type = factory.GetRegistration(compType).Type;
                var read = serializationManager.ReadWithValueOrThrow <IComponent>(type, copy, skipHook: skipHook);

                components[compType] = read.value;
                mappings.Add(DeserializationResult.Value(compType), read.result);
            }

            var referenceTypes = new List <Type>();

            // Assert that there are no conflicting component references.
            foreach (var componentName in components.Keys)
            {
                var registration = factory.GetRegistration(componentName);
                foreach (var compType in registration.References)
                {
                    if (referenceTypes.Contains(compType))
                    {
                        throw new InvalidOperationException(
                                  $"Duplicate component reference in prototype: '{compType}'");
                    }

                    referenceTypes.Add(compType);
                }
            }

            return(new DeserializedComponentRegistry(components, mappings));
        }
예제 #8
0
 public override DeserializationResult PushInheritanceFrom(DeserializationResult source)
 {
     return(source.Copy().Cast <DeserializedValue>());
 }
 public DeserializationResult Read(ISerializationManager serializationManager, ValueDataNode node,
                                   IDependencyCollection dependencies, bool skipHook, ISerializationContext?context = null)
 {
     return(DeserializationResult.Value(node.Value));
 }
예제 #10
0
 public abstract DeserializationResult PushInheritanceFrom(DeserializationResult source);