Replies: 8 comments
-
#11 I don't like this implementation too much |
Beta Was this translation helpful? Give feedback.
-
A design based on the dictionary Parser.ParseObject(new Dictionary<string, Parser<Func<Data, Data>>>
{
["foo"] = from value in Parser.String
select new Func<Data, Data>(data => data with { Foo = value }),
["bar"] = from value in Parser.String
select new Func<Data, Data>(data => data with { Bar = value })
}).Select(updater => updater(new Data(Foo: "", Bar: ""))); It's a little too verbose for my taste. I can keep it as an alternative |
Beta Was this translation helpful? Give feedback.
-
Using an additional method, I can get rid of ugly generics Parser<Data> parser = Parser.ParseObject(propertyName => propertyName switch
{
"foo" => Parser.String.Bar().Updater<Data>((foo, data) => data with { Foo = foo }),
"bar" => Parser.String.Bar().Updater<Data>((bar, data) => data with { Bar = bar }),
_ => Parser.Failure<Func<Data, Data>>()
}).Select(updater => updater(new Data("", ""))); It won't be memory efficient at all |
Beta Was this translation helpful? Give feedback.
-
Parser<Data> parser = Parser.ParseObject(propertyName => propertyName switch
{
"foo" => Parser.String.Updater((string foo, Data data) => data with { Foo = foo }),
"baz" => Parser.String.Updater((string foo, Data data) => data with { Foo = foo }),
"bar" => Parser.String.Bar().Updater<Data>((bar, data) => data with { Bar = bar }),
_ => Parser.Failure<Func<Data, Data>>()
}, new Data("", "")); |
Beta Was this translation helpful? Give feedback.
-
Parser<Data> parser = Parser.ParseObject(propertyName => propertyName switch
{
"foo" => Parser.String.Updater((string foo, Data data) => data with { Foo = foo }),
"baz" => Parser.String.Updater((string foo, Data data) => data with { Foo = foo }),
"bar" => Parser.String.Bar().Updater<Data>((bar, data) => data with { Bar = bar }),
_ => Parser.Failure<Func<Data, Data>>()
}).AsT(new Data(Foo: "", Bar: "")); |
Beta Was this translation helpful? Give feedback.
-
Updater method can also accept an Parser<Data> parser = Parser.ParseObject(propertyName => propertyName switch
{
"foo" => Parser.String.Updater((string foo, Data data) => data.Foo = foo),
"baz" => Parser.String.Updater((string foo, Data data) => data.Bar = foo),
"bar" => Parser.String.Bar().Updater<Data>((bar, data) => data with { Bar = bar }),
_ => Parser.Failure<Func<Data, Data>>()
}, new Data("", "")); |
Beta Was this translation helpful? Give feedback.
-
Something like this Parser<Data> parser2 = Parser.ParseObject(propertyName => propertyName switch
{
"foo" => Parser.String.Updater((string foo, Data data) => data with { Foo = foo }),
"bar" => Parser.String.Updater((string foo, Data data) => data.Foo = foo),
"baz" => Parser.String.Updater((Data data) => data with { Foo = "foo" }),
"qux" => Parser.String.Updater((Data data) => data.Foo = "foo"),
"ham" => Parser.String.Updater<string, Data>(),
_ => Parser.Failure<Func<Data, Data>>()
}, new Data("", "")); ; |
Beta Was this translation helpful? Give feedback.
-
Parser<Data> parser2 = Parser.ParseObject(propertyName => propertyName switch
{
"foo" => Parser.String.Updater((string foo, Data data) => data with { Foo = foo }),
"bar" => Parser.String.Updater((string foo, Data data) => data.Foo = foo),
"baz" => Parser.String.Updater((Data data) => data with { Foo = "foo" }),
"qux" => Parser.String.Updater((Data data) => data.Foo = "foo"),
"ham" => Parser.String.Updater<string, Data>(),
"data" => Parser.ParseObject(propertyName => propertyName switch
{
"baz" => Parser.String.Updater((string baz, SubType data) => data with { Baz = baz}),
_ => Parser.Failure<Func<SubType, SubType>>()
}, (Data data) => SubType.Copy(data)),
_ => Parser.Failure<Func<Data, Data>>()
}, new Data("", "")); |
Beta Was this translation helpful? Give feedback.
-
Add support for object deserialization
I want to be able to create parsers of such a form:
Beta Was this translation helpful? Give feedback.
All reactions