Esempio n. 1
0
        protected IResult <Unit> serializeObject(string name, object obj)
        {
            builder.BeginObject(name.ToLower1());
            var members = serializeMembers(obj);

            if (members.IsSuccessful)
            {
                builder.End();
            }

            return(members);
        }
Esempio n. 2
0
        protected IResult <Unit> parseMembers(string name)
        {
            while (index < source.Length)
            {
                var token = lookAhead();
                if (token.ValueOrCast <Unit>(out var type, out var asUnit))
                {
                    switch (type)
                    {
                    case TokenType.Comma:
                        setLookAheadTokenToNone();
                        invokeEvent(TokenType.Comma, name, ",");
                        break;

                    case TokenType.ObjectClose:
                        setLookAheadTokenToNone();
                        invokeEvent(TokenType.ObjectClose, name, "}");
                        builder.End();
                        return(Unit.Success());

                    default:
                        var result =
                            from innerName in parseNameOrString()
                            from next in nextToken()
                            from colon in next.Must().Equal(TokenType.Colon).OrFailure(() => $"Expected colon at {index}: {source.Drop(index)}").Map(t => next)
                            from value in parseValue(innerName)
                            select value;
                        if (result.ValueOrOriginal(out _, out var original))
                        {
                            break;
                        }
                        else
                        {
                            return(original);
                        }
                    }
                }