/// <summary>
 /// Initializes a new instance of the <see cref="ObjectContext"/> struct.
 /// </summary>
 /// <param name="serializerContext">The serializer context.</param>
 /// <param name="instance">The instance.</param>
 /// <param name="descriptor">The descriptor.</param>
 public ObjectContext(SerializerContext serializerContext, object instance, ITypeDescriptor descriptor)
     : this()
 {
     SerializerContext = serializerContext;
     Instance = instance;
     Descriptor = descriptor;
 }
 /// <inheritdoc/>
 public override IYamlSerializable TryCreate(SerializerContext context, ITypeDescriptor typeDescriptor)
 {
     return typeDescriptor is DictionaryDescriptor ? this : null;
 }
 public IYamlSerializable TryCreate(SerializerContext context, ITypeDescriptor typeDescriptor)
 {
     return typeDescriptor is ArrayDescriptor ? this : null;
 }
 private static void WriteYaml(SerializerContext context, object value, Type expectedType)
 {
     var objectContext = new ObjectContext(context, value, context.FindTypeDescriptor(expectedType));
     // TODO: we should go through the ObjectSerializerBackend, not directly use the ObjectSerializer!
     context.Serializer.ObjectSerializer.WriteYaml(ref objectContext);
 }
 private static object ReadYaml(SerializerContext context, Type expectedType)
 {
     var node = context.Reader.Parser.Current;
     try
     {
         var objectContext = new ObjectContext(context, null, context.FindTypeDescriptor(expectedType));
         // TODO: we should go through the ObjectSerializerBackend, not directly use the ObjectSerializer!
         return context.Serializer.ObjectSerializer.ReadYaml(ref objectContext);
     }
     catch (Exception ex)
     {
         throw new YamlException(node.Start, node.End, $"Error while deserializing node [{node}]", ex);
     }
 }
Exemple #6
0
 /// <summary>
 /// Initializes a new instance of the <see cref="SerializationStreamBase"/> class.
 /// </summary>
 public SerializationStream()
 {
     Context = new SerializerContext();
 }
        private IYamlSerializable GetSerializer(SerializerContext context, ITypeDescriptor typeDescriptor)
        {
            IYamlSerializable serializer;
            if (!serializers.TryGetValue(typeDescriptor.Type, out serializer))
            {
                foreach (var factory in factories)
                {
                    serializer = factory.TryCreate(context, typeDescriptor);
                    if (serializer != null)
                    {
                        break;
                    }
                }
            }

            if (serializer == null)
            {
                throw new InvalidOperationException("Unable to find a serializer for the type [{0}]".DoFormat(typeDescriptor.Type));
            }

            return serializer;
        }
 private void WriteState(SerializerContext context, ParserState state)
 {
     var writer = context.Writer;
     bool hasDefaultAction = state.DefaultAction != null;
     writer.Write(hasDefaultAction);
     if (hasDefaultAction)
     {
         WriteAction(context, state.DefaultAction);
     }
     else
     {
         writer.Write((ushort)state.Actions.Count);
         foreach (var elementActionPair in state.Actions)
         {
             writer.Write((short)Data.AllElements.IndexOf(elementActionPair.Key));
             WriteAction(context, elementActionPair.Value);
         }
     }
 }
        public void Serialize(Stream outputStream, ParserAutomaton automaton)
        {
            var writer = new BinaryWriter(outputStream);
            var context = new SerializerContext(automaton, writer);

            writer.Write((ushort)automaton.States.Count);
            writer.Write((ushort)automaton.DefaultInitialState.Id);
            writer.Write((byte)automaton.InitialStates.Count);

            foreach (var state in context.Automaton.InitialStates)
                WriteInitialStateEntry(writer, state);

            foreach (var state in context.Automaton.States)
                WriteState(context, state);
        }
        public override IYamlSerializable TryCreate(SerializerContext context, ITypeDescriptor typeDescriptor)
        {
            var type = typeDescriptor.Type;

            return(CanVisit(type) ? this : null);
        }
        private void WriteAction(SerializerContext context, ParserAction action)
        {
            var shiftAction = action as ShiftParserAction;
            var writer = context.Writer;
            if (shiftAction != null)
            {
                writer.Write(ShiftParserActionId);
                writer.Write((ushort)shiftAction.NextState.Id);
                return;
            }

            var reduceAction = action as ReduceParserAction;
            if (reduceAction != null)
            {
                writer.Write(ReduceParserActionId);
                writer.Write((ushort)Data.AllReductions.IndexOf(reduceAction.Reduction));
                return;
            }

            if (action is AcceptParserAction)
            {
                writer.Write(AcceptarserActionId);
                return;
            }

            throw new NotSupportedException("Action is not supported.");
        }
Exemple #12
0
 /// <inheritdoc/>
 public override IYamlSerializable TryCreate(SerializerContext context, ITypeDescriptor typeDescriptor)
 {
     return(typeDescriptor.Type == typeof(Entity) ? this : null);
 }
Exemple #13
0
 /// <inheritdoc/>
 public override IYamlSerializable TryCreate(SerializerContext context, ITypeDescriptor typeDescriptor)
 {
     return(typeDescriptor is DictionaryDescriptor ? this : null);
 }
Exemple #14
0
 /// <inheritdoc/>
 public virtual IYamlSerializable TryCreate(SerializerContext context, ITypeDescriptor typeDescriptor)
 {
     // always accept
     return(this);
 }
 public IYamlSerializable TryCreate(SerializerContext context, ITypeDescriptor typeDescriptor)
 {
     return(typeDescriptor.Type == typeof(AssetName) ? this : null);
 }
Exemple #16
0
 /// <summary>
 /// Initializes a new instance of the <see cref="ObjectContext"/> struct.
 /// </summary>
 /// <param name="serializerContext">The serializer context.</param>
 /// <param name="instance">The instance.</param>
 /// <param name="descriptor">The descriptor.</param>
 public ObjectContext(SerializerContext serializerContext, object instance, ITypeDescriptor descriptor) : this()
 {
     SerializerContext = serializerContext;
     Instance          = instance;
     Descriptor        = descriptor;
 }