diff --git a/README.md b/README.md index fc9942f..5eb0abf 100644 --- a/README.md +++ b/README.md @@ -1,11 +1,26 @@ -Template for shared library implemented in c++ +# Weaseljson + +An rfc8259-compliant streaming json parser # Features -- unit tests -- fuzz targets -- benchmarks -- CI -- (x64,arm64) * (linux,macos) support -- no libstdc++ dependency -- python bindings +- SAX-style api +- No memory allocations during parsing +- O(1) stack memory usage +- Streaming api - no need to buffer the entire document in memory. Parsing is resumed when more data is available +- Strings are unescaped in place before they're presented. No unicode normalization is performed +- Robust to crashes with untrusted input + +# Rfc8259 conformance notes + +- There are no limits on number precision. Numbers are only validated syntactically and are presented as is +- Only utf-8 is accepted +- Invalid utf-8 is rejected +- Byte order markers are rejected +- Invalid escaped utf16 surrogate pairs are rejected +- Documents that are too deeply nested are rejected to control memory usage +- Duplicate keys are presented + +# Caveats + +- Users should be prepared to discard work done during SAX callbacks if the document is ultimately rejected