Exemplo n.º 1
0
        static Parsed <Thickness <Points> > TryParseThickness(string str)
        {
            var parts = str.Split(",");

            switch (parts.Length)
            {
            case 1:
                return(parts[0].TryParsePoints()
                       .Select(all => new Thickness <Points>(all)));

            case 2:
                return(Parsed.Create(
                           stringValue: str,
                           value: Optional.Combine(
                               parts[0].TryParsePoints().Value,
                               parts[1].TryParsePoints().Value,
                               (h, v) => new Thickness <Points>(h, v))));

            case 4:
                return(Parsed.Create(
                           stringValue: str,
                           value: Optional.Combine(
                               parts[0].TryParsePoints().Value,
                               parts[1].TryParsePoints().Value,
                               parts[2].TryParsePoints().Value,
                               parts[3].TryParsePoints().Value,
                               (l, t, r, b) => new Thickness <Points>(l, t, r, b))));

            default:
                return(Parsed.Failure <Thickness <Points> >(str));
            }
        }
Exemplo n.º 2
0
        public static Func <string, Parsed <Size <T> > > CreateSizeParser <T>(Func <string, Parsed <T> > tryParseLength)
        {
            return(value =>
            {
                var parts = value.Split(",");
                if (parts.Length == 1)
                {
                    return tryParseLength(parts[0]).Select(Size.Create);
                }

                if (parts.Length == 2)
                {
                    return Parsed.Create(value,
                                         tryParseLength(parts[0]).Value.SelectMany(x =>
                                                                                   tryParseLength(parts[1]).Value.Select(y =>
                                                                                                                         Size.Create(x, y))));
                }

                return Parsed.Failure <Size <T> >(value);
            });
        }