Ejemplo n.º 1
0
        internal override Union <ITypeErrorBuilder, PValue> TryCreateFromMap(
            string json,
            GreenJsonMapSyntax jsonMapSyntax,
            out SettingObject convertedValue,
            int mapSyntaxStartPosition,
            List <JsonErrorInfo> errors)
        {
            var mapBuilder = new Dictionary <string, PValue>();

            // Analyze values with this schema while building the PMap.
            foreach (var(keyNodeStart, keyNode, valueNodeStart, valueNode) in jsonMapSyntax.ValidKeyValuePairs())
            {
                if (TryGetProperty(new SettingKey(keyNode.Value), out SettingProperty property))
                {
                    var valueOrError = property.TryCreateValue(
                        json,
                        valueNode,
                        mapSyntaxStartPosition + valueNodeStart,
                        errors);

                    if (valueOrError.IsOption2(out PValue convertedItemValue))
                    {
                        mapBuilder.Add(keyNode.Value, convertedItemValue);
                    }
                    else
                    {
                        ITypeErrorBuilder typeError = valueOrError.ToOption1();
                        errors.Add(ValueTypeErrorAtPropertyKey.Create(
                                       typeError,
                                       keyNode,
                                       valueNode,
                                       json,
                                       mapSyntaxStartPosition + keyNodeStart,
                                       mapSyntaxStartPosition + valueNodeStart));
                    }
                }
                else
                {
                    errors.Add(UnrecognizedPropertyKeyTypeError.Create(
                                   keyNode,
                                   json,
                                   mapSyntaxStartPosition + keyNodeStart));
                }
            }

            var map = new PMap(mapBuilder);

            convertedValue = new SettingObject(this, map);
            return(map);
        }
Ejemplo n.º 2
0
 internal abstract Union <ITypeErrorBuilder, PValue> TryCreateFromMap(
     string json,
     GreenJsonMapSyntax jsonMapSyntax,
     out T convertedValue,
     int valueNodeStartPosition,
     List <JsonErrorInfo> errors);