Skip to content

Commit

Permalink
Update README.md
Browse files Browse the repository at this point in the history
  • Loading branch information
leandromoh authored Nov 13, 2023
1 parent 3c63801 commit f9b6883
Showing 1 changed file with 11 additions and 10 deletions.
21 changes: 11 additions & 10 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -17,17 +17,18 @@ Even the focus of this library being data mapping to objects (classes, structs,
1. It supports .NET 6, 7 and .NET Standard 2.1
2. It has minimal heap allocations because it does intense use of [Span](https://docs.microsoft.com/en-us/archive/msdn-magazine/2018/january/csharp-all-about-span-exploring-a-new-net-mainstay) type, a .NET type designed to have high-performance and reduce memory allocations [(see benchmark)](/Benchmark.md)
3. It is even more performant because the relevant code is generated using [expression trees](https://docs.microsoft.com/dotnet/csharp/expression-trees), which once compiled is fast as handwriting code
4. It supports parse for ANY type: classes, structs, records, arrays, tuples etc. It does not do [boxing](https://docs.microsoft.com/dotnet/csharp/programming-guide/types/boxing-and-unboxing) for structs.
4. It supports parse for ANY type: classes, structs, records, arrays, tuples etc.
5. It supports to map values for properties, fields, indexers, etc.
6. It is flexible: you can choose the most convenient way to configure each of your parsers: indexed or sequential configuration
7. It is extensible: you can totally customize your parsing with lambdas/delegates
8. It is even more extensible because you can easily create extension methods that wraps custom mappings
9. It is efficient: you can take advantage of multicore to use parallel processing and speed up parsing
10. It is not intrusive: all mapping configuration is done outside of the mapped type. It keeps your classes with minimised dependencies and low coupling
11. It provides clean API with familiar methods: Parse, TryParse and TryFormat
12. It is easy configurated with a builder object, even programmatically, because does not require to define a class each time you want to define a parser
13. Compliant with [RFC 4180](https://www.ietf.org/rfc/rfc4180.txt) standard
14. It supports to parse individual records as well whole files
6. It does not do [boxing](https://docs.microsoft.com/dotnet/csharp/programming-guide/types/boxing-and-unboxing) for structs.
7. It is flexible: you can choose the most convenient way to configure each of your parsers: indexed or sequential configuration
8. It is extensible: you can totally customize your parsing with lambdas/delegates
9. It is even more extensible because you can easily create extension methods that wraps custom mappings
10. It is efficient: you can take advantage of multicore to use parallel processing and speed up parsing
11. It is not intrusive: all mapping configuration is done outside of the mapped type. It keeps your classes with minimised dependencies and low coupling
12. It provides clean API with familiar methods: Parse, TryParse and TryFormat
13. It is easy configurated with a builder object, even programmatically, because does not require to define a class each time you want to define a parser
14. Compliant with [RFC 4180](https://www.ietf.org/rfc/rfc4180.txt) standard
15. It supports to parse individual records as well whole files

## Benchmark

Expand Down

0 comments on commit f9b6883

Please sign in to comment.