Commit Graph

72 Commits

Author SHA1 Message Date
Zahary Karadjov 5034fef8d0
Avoid a dangerous string to cstring conversion 2022-06-07 12:35:20 +03:00
tersec 7d3d339e73
rm TaintedString (#43) 2022-06-04 08:58:13 +02:00
Jordan Hrycaj 3509706517
Lazy JSON parser (#42)
* Proper error handling when parsed number exceeds uint64

details:
  Returns an "errNonPortableInt" error

* need legacy flag for unit tests

* lazy numeric token parser

why:
  Numeric data may have a custom format. In particular,numeric data may be
  Uint256 which is not a JSON standard and might lead to an overflow.

details:
  Numeric values are assigned a preliminary token type tkNumeric without
  being fully parsed. This can be used to insert a custom parser.
  Otherwise the value is parsed implicitly when querying/fetching the
  token type.

  + tok:     replaced by getter tok() resolving lazy stuff (if necessary)
  + tokKind: current type without auto-resolving

  This lazy scheme could be extended to other custom types as long as
  the first token letter determines the custom type.

* activate lazy parsing in reader

howto:
  + no code change if a custom reader refers to an existing reader
    type FancyInt = distinct int
    proc readValue(reader: var JsonReader, value: var FancyInt) =
      value = reader.readValue(int).FancyInt

  + bespoke reader for cusom parsing
    type FancyUint = distinct uint
    proc readValue(reader: var JsonReader, value: var FancyUint) =
      if reader.lexer.lazyTok == tkNumeric:
        var accu: FancyUint
        reader.lexer.customIntValueIt:
          accu = accu * 10 + it.u256
        value = accu
      elif reader.lexer.tok == tkString:
        value = reader.lexer.strVal.parseUint.FancyUint
        ...
      reader.lexer.next

  + full code explanation at json_serialisation/reader.readValue()

* Add lazy parsing for customised string objects

why:
  This allows parsing large or specialised strings without storing it
  in the lexer state descriptor.

details:
  Similar logic applies as for the cusomised number parser. For mostly
  all practical cases, a DSL template is available serving as wrapper
  around the character/byte item processor code.

* fix typo in unit test
2022-05-05 17:33:40 +01:00
Zahary Karadjov 461fd03edb
Better default JsonReaderError.formatMsg implementation 2022-03-09 18:24:02 +02:00
Jacek Sieka a12beabd2f
Revert "add missed exceptions (#36)" (#39)
This reverts commit 232710f5b2.
2022-02-21 10:29:04 +01:00
jangko ea965bbe00
silence spurious warning: 'ReaderType' is declared but not used 2022-02-18 22:57:58 +07:00
Jacek Sieka cd044da00f
clean up imports/exports (#31) 2022-02-18 10:26:15 +01:00
Antonis Geralis 232710f5b2
add missed exceptions (#36)
* add missed exceptions

* Update json_serialization/reader.nim

Co-authored-by: Jacek Sieka <arnetheduck@gmail.com>
2022-02-18 10:24:20 +01:00
Tanguy 010aa238cf Enable styleCheck:usages 2021-12-15 13:17:38 +02:00
Kim De Mey c5f0e2465e
Add gcsafe and raises annotations to the formatMsg methods (#33) 2021-11-18 15:24:59 +01:00
Zahary Karadjov 297496d703 NULL cstrings are encoded to JS null 2021-11-01 18:59:12 +02:00
Zahary Karadjov 4f3775ddf4 Add JsonReader.init(..., requireAllFields: bool) 2021-08-11 20:01:47 +03:00
Zahary Karadjov fe8a82ca76
Adapt to the latest nim-serialization API 2021-03-19 04:13:55 +02:00
Zahary Karadjov 706eb5740e
Add support for serialization flavors 2021-03-18 13:01:06 +02:00
Zahary Karadjov cedf0c5f0c
Add a low-level API for controlling the state of the Writer when writing to the output stream manually 2020-11-27 19:42:33 +02:00
Zahary Karadjov 32f75d93b0
Add support for TaintedString 2020-11-12 21:00:10 +02:00
Zahary Karadjov 3b0c9eafa4
Bugfix: incorrect logic in the parsing of comments fails to detect EOF properly 2020-10-09 19:32:25 +03:00
Zahary Karadjov 1dccd4b2ef
Another readObjectFields convenience helper 2020-08-02 20:15:44 +03:00
Zahary Karadjov f011bea54b
Add a helper for specifying enums types that must be serialized as strings 2020-08-02 20:15:13 +03:00
Zahary Karadjov ec374f26ca
Break reader.readObject into smaller reusable pieces 2020-08-02 13:22:24 +03:00
Zahary Karadjov 9ca88fdcd4
Turn a potential assertion failure into a syntax error 2020-08-01 19:28:36 +03:00
Zahary Karadjov d5eb9427b8
Serialization of JsonNode fields 2020-07-24 23:16:35 +03:00
Zahary Karadjov 25adda6f3f
Alternative implementation that doesn't require rewind points 2020-07-21 22:09:38 +03:00
Zahary Karadjov 4d8145c67b
WIP Deserialization of the JsonString literal fields 2020-07-17 23:58:02 +03:00
Zahary Karadjov 1cf51931f1
Implement forward-compatible deserialization 2020-06-30 22:11:56 +03:00
Zahary Karadjov 463a0cf1b7
Address review comments; Passing test suite 2020-06-22 17:42:50 +03:00
Zahary Karadjov 6e92113a06
Stricter error handling 2020-06-16 01:03:00 +03:00
Zahary Karadjov c478b7bbba
Proper JSON serialization for IP addresses 2020-06-05 17:06:48 +03:00
Zahary Karadjov 4f2aa8b5cb
Make the JsonString type more accessible 2020-06-01 21:15:33 +03:00
Zahary Karadjov 8d4c31f7c2
Allow custom serializers to report unexpected values in the Json file 2020-05-30 22:40:17 +03:00
Zahary Karadjov 2f5e71b25f
Use the latest FastStreams API 2020-05-13 11:43:52 +03:00
Alexander Ivanov 193d103934 Read keys of table as string as this is only valid json, but convert them if needed 2020-05-08 17:01:15 +03:00
Jacek Sieka cb695d175f reader support for stringlikes 2020-04-29 19:37:34 +03:00
Jacek Sieka e485b74a10 treat array-of-char as string 2020-04-29 19:37:34 +03:00
Zahary Karadjov bed0e403a4
Add support for not nil ref types 2020-04-23 01:39:56 +03:00
Zahary Karadjov 96a337d334
stream.eof -> not stream.readable 2020-04-14 17:08:07 +03:00
Zahary Karadjov a8c5604808
Stop using the AsciiStream flavour 2020-04-13 17:01:49 +03:00
Zahary Karadjov 16931f4fa3
Use the improved InputStream API 2020-04-10 16:46:12 +03:00
Zahary Karadjov bdddff5037
Use the latest FastStreams API 2020-04-09 23:14:14 +03:00
Zahary Karadjov 6e9d69dafb
Handle int overflows better; Support Nim 1.2 2020-03-25 18:43:49 +02:00
Zahary Karadjov 6350b72b5e
Handle openArrays in writeField 2020-03-18 20:20:35 +02:00
Zahary Karadjov ab53e009b9
Add JsonString. to facilitate easier logging in Chronicles 2020-03-18 18:21:18 +02:00
Zahary Karadjov 88b79e2300
Remove warnings in Nim 1.0.2 2019-11-04 18:42:34 +00:00
Zahary Karadjov f4bd22e054 Support for tuples 2019-08-14 16:18:42 +02:00
andri lim a0607c6375 fix 32 bit problem 2019-08-14 15:44:59 +02:00
Zahary Karadjov f6a7da52e0
Handle the writing aspects of custom field serialization 2019-08-07 01:20:27 +03:00
Zahary Karadjov 9a8d593598
Fix compilation issues with Nim 0.19.6 2019-08-02 15:07:06 +03:00
Alexander Ivanov e49b8bdb43 Implement support for normal and ordered tables 2019-08-02 13:33:44 +03:00
Zahary Karadjov 997ae368a5
Add a test case for case objects 2019-08-01 17:12:31 +03:00
Zahary Karadjov 0c12b0f42d
In error messages, display the start position of strings instead of the end pos 2019-07-21 17:12:48 +03:00