public object ReadYaml(IParser parser, Type type) { var env = new InternalEnvironmentVariables(); parser.Expect <MappingStart>(); do { var scalar = parser.Peek <Scalar>(); if (scalar != null) { if (scalar.Value == "matrix") { // discard "matrix" value itself parser.Expect <Scalar>(); // discard SequenceStart parser.Expect <SequenceStart>(); do { var matrixItemVariables = new List <InternalVariable>(); parser.Expect <MappingStart>(); do { matrixItemVariables.Add(deserializer.Deserialize <InternalVariable>(parser)); } while (!parser.Accept <MappingEnd>()); parser.Expect <MappingEnd>(); env.InternalMatrix.Add(matrixItemVariables.AsReadOnly()); } while (!parser.Accept <SequenceEnd>()); parser.Expect <SequenceEnd>(); } else { var variable = deserializer.Deserialize <InternalVariable>(parser); env.InternalCommonVariables.Add(variable); } } } while (!parser.Accept <MappingEnd>()); parser.Expect <MappingEnd>(); return(env); }
public object ReadYaml(IParser parser, Type type) { var env = new InternalEnvironmentVariables(); parser.Consume <MappingStart>(); do { parser.Accept <Scalar>(out var scalar); if (scalar != null) { if (scalar.Value == "global") { // discard "global" value itself parser.Consume <Scalar>(); // read global variables (common to all matrix items) parser.Consume <MappingStart>(); do { env.InternalCommonVariables.Add(_deserializer.Deserialize <InternalVariable>(parser)); } while (!parser.Accept <MappingEnd>(out _)); parser.Consume <MappingEnd>(); } else if (scalar.Value == "matrix") { // discard "matrix" value itself parser.Consume <Scalar>(); // discard SequenceStart parser.Consume <SequenceStart>(); do { var matrixItemVariables = new List <InternalVariable>(); parser.Consume <MappingStart>(); do { matrixItemVariables.Add(_deserializer.Deserialize <InternalVariable>(parser)); } while (!parser.Accept <MappingEnd>(out _)); parser.Consume <MappingEnd>(); env.InternalMatrix.Add(matrixItemVariables.AsReadOnly()); } while (!parser.Accept <SequenceEnd>(out _)); parser.Consume <SequenceEnd>(); } else { var variable = _deserializer.Deserialize <InternalVariable>(parser); env.InternalCommonVariables.Add(variable); } } } while (!parser.Accept <MappingEnd>(out _)); parser.Consume <MappingEnd>(); return(env); }