Nathan Baulch
36df8eef6e
General cleanup ( #999 )
2025-08-24 12:18:46 +02:00
Thomas Pelletier
18a2148713
Handle array table into an empty slice ( #997 )
...
Fix #995
2025-08-21 12:05:41 +02:00
Thomas Pelletier
bc9958322f
Add missing UnmarshalTOML call ( #996 )
...
Fixes #994 .
2025-08-21 10:39:23 +02:00
Alex Mikitik
014204cfb7
Replace stretchr/testify with an internal test suite ( #981 )
...
As recommended, an `internal/assert` package was added with a reduced set of assertions. All tests were then refactored to use the internal assertions. When more complex assertions were used, they have been rewritten using logic and the simplified assertions.
Fancy formatting for failures was omitted. The `internal/assert/assertions.diff` function could be overwritten for better formatting. That is where diff libraries are used in other test suites.
Refs: #872
Co-authored-by: Alex Mikitik <alex.mikitik@oracle.com >
2025-04-07 06:36:37 -04:00
Daniel Weiße
d55304782e
Allow int, uint, and floats as map keys ( #958 )
...
Signed-off-by: Daniel Weiße <dw@edgeless.systems >
2024-08-17 15:44:21 -04:00
rszyma
8ed6d131eb
Decode: unstable/Unmarshal interface ( #940 )
...
Co-authored-by: Pavlos Karakalidis <pkarakal@pkarakal.com >
Co-authored-by: Thomas Pelletier <thomas@pelletier.codes >
2024-03-19 12:33:12 -04:00
Thomas Pelletier
06fb30bf2e
Decode: fix reuse of slice for array tables ( #934 )
...
When decoding into a non-empty slice, it needs to be emptied so that only the
tables contained in the document are present in the resulting value.
Arrays are not impacted because their unmarshal offset is tracked separately.
Fixes #931
2024-02-27 15:28:49 -05:00
Thomas Pelletier
34765b4a9e
Fix unmarshaling of nested non-exported struct ( #917 )
...
Fixes #915
2023-12-11 14:17:49 -05:00
Thomas Pelletier
4835627845
Decode: improve errors on integers and strings ( #891 )
2023-08-28 11:17:48 -04:00
Haiyang Wang
bb026cae89
Decode: fix panic when parsing '0' as a float ( #887 )
...
Fixes #886
2023-08-22 18:07:39 +02:00
David Barroso
e183db7e69
Decode: assigned empty struct to empty defined sections ( #879 )
...
Co-authored-by: Thomas Pelletier <thomas@pelletier.codes >
2023-07-12 10:53:17 -04:00
Thomas Pelletier
986afffb7c
Decode: fix decode into unsettable structs ( #868 )
...
Fixes #866
2023-05-16 09:29:50 -04:00
Thomas Pelletier
8c2c9cc986
Add example on how to use TextUnmarshaler ( #867 )
...
Ref #865
2023-05-16 08:17:21 -04:00
Gordon
d34104d493
Support text Un/Marshaller for map keys ( #863 )
2023-05-09 17:56:57 +02:00
Thomas Pelletier
643c251c4b
Fix panic when unmarshaling into a map twice ( #854 )
...
Fixes #851
2023-02-28 17:34:24 +01:00
Thomas Pelletier
8a416daa69
Fix error report of type mismatch on inline tables ( #853 )
...
Parser did not track the location of the faulty inline table in the
document, and unmarshaler tried to the use the non-raw data field of the
AST node, both resulting into a panic when generating the parser error.
Fixes #850
2023-02-28 17:06:49 +01:00
Andreas Deininger
fcd9179b7d
Fixes typos ( #849 )
2023-02-13 03:57:48 -08:00
Thomas Pelletier
28f1efc7d3
Decode: don't break on non-struct embed field ( #810 )
2022-08-22 18:39:11 -04:00
Thomas Pelletier
e46d245c09
Decode: don't crash on embedded nil pointers ( #808 )
...
Also has the perks of reducing the overhead of FindByIndex:
```
name old time/op new time/op delta
UnmarshalDataset/config-32 17.0ms ± 1% 17.0ms ± 1% ~ (p=1.000 n=5+5)
UnmarshalDataset/canada-32 71.6ms ± 1% 71.4ms ± 1% ~ (p=1.000 n=5+5)
UnmarshalDataset/citm_catalog-32 24.2ms ± 3% 23.5ms ± 2% -3.03% (p=0.032 n=5+5)
UnmarshalDataset/twitter-32 9.37ms ± 1% 9.09ms ± 2% -2.97% (p=0.032 n=5+5)
UnmarshalDataset/code-32 75.4ms ± 2% 74.9ms ± 0% ~ (p=0.222 n=5+5)
UnmarshalDataset/example-32 147µs ±10% 136µs ± 1% -7.14% (p=0.008 n=5+5)
Unmarshal/SimpleDocument/struct-32 512ns ± 2% 500ns ± 0% -2.35% (p=0.008 n=5+5)
Unmarshal/SimpleDocument/map-32 721ns ± 2% 702ns ± 1% -2.68% (p=0.008 n=5+5)
Unmarshal/ReferenceFile/struct-32 40.1µs ± 0% 39.6µs ± 0% -1.30% (p=0.008 n=5+5)
Unmarshal/ReferenceFile/map-32 62.3µs ± 1% 60.6µs ± 0% -2.83% (p=0.008 n=5+5)
Unmarshal/HugoFrontMatter-32 10.8µs ± 1% 10.5µs ± 1% -2.86% (p=0.008 n=5+5)
name old speed new speed delta
UnmarshalDataset/config-32 61.8MB/s ± 1% 61.8MB/s ± 1% ~ (p=1.000 n=5+5)
UnmarshalDataset/canada-32 30.8MB/s ± 1% 30.8MB/s ± 1% ~ (p=1.000 n=5+5)
UnmarshalDataset/citm_catalog-32 23.0MB/s ± 3% 23.8MB/s ± 2% +3.09% (p=0.032 n=5+5)
UnmarshalDataset/twitter-32 47.2MB/s ± 1% 48.6MB/s ± 2% +3.09% (p=0.032 n=5+5)
UnmarshalDataset/code-32 35.6MB/s ± 2% 35.9MB/s ± 0% ~ (p=0.222 n=5+5)
UnmarshalDataset/example-32 55.3MB/s ±10% 59.4MB/s ± 1% +7.36% (p=0.008 n=5+5)
Unmarshal/SimpleDocument/struct-32 21.5MB/s ± 2% 22.0MB/s ± 0% +2.41% (p=0.008 n=5+5)
Unmarshal/SimpleDocument/map-32 15.2MB/s ± 2% 15.7MB/s ± 1% +2.74% (p=0.008 n=5+5)
Unmarshal/ReferenceFile/struct-32 131MB/s ± 0% 132MB/s ± 0% +1.31% (p=0.008 n=5+5)
Unmarshal/ReferenceFile/map-32 84.1MB/s ± 1% 86.6MB/s ± 0% +2.91% (p=0.008 n=5+5)
Unmarshal/HugoFrontMatter-32 50.6MB/s ± 1% 52.1MB/s ± 1% +2.93% (p=0.008 n=5+5)
name old alloc/op new alloc/op delta
UnmarshalDataset/config-32 5.86MB ± 0% 5.86MB ± 0% ~ (p=0.579 n=5+5)
UnmarshalDataset/canada-32 83.0MB ± 0% 83.0MB ± 0% ~ (p=0.651 n=5+5)
UnmarshalDataset/citm_catalog-32 34.7MB ± 0% 34.7MB ± 0% ~ (p=0.548 n=5+5)
UnmarshalDataset/twitter-32 12.7MB ± 0% 12.7MB ± 0% ~ (p=1.000 n=5+5)
UnmarshalDataset/code-32 22.2MB ± 0% 22.2MB ± 0% ~ (p=0.841 n=5+5)
UnmarshalDataset/example-32 186kB ± 0% 186kB ± 0% ~ (p=0.111 n=5+5)
Unmarshal/SimpleDocument/struct-32 805B ± 0% 805B ± 0% ~ (all equal)
Unmarshal/SimpleDocument/map-32 1.13kB ± 0% 1.13kB ± 0% ~ (all equal)
Unmarshal/ReferenceFile/struct-32 20.9kB ± 0% 20.9kB ± 0% ~ (p=0.643 n=5+5)
Unmarshal/ReferenceFile/map-32 38.3kB ± 0% 38.3kB ± 0% ~ (p=0.397 n=5+5)
Unmarshal/HugoFrontMatter-32 7.44kB ± 0% 7.44kB ± 0% ~ (all equal)
name old allocs/op new allocs/op delta
UnmarshalDataset/config-32 227k ± 0% 227k ± 0% ~ (p=1.000 n=5+5)
UnmarshalDataset/canada-32 782k ± 0% 782k ± 0% ~ (all equal)
UnmarshalDataset/citm_catalog-32 192k ± 0% 192k ± 0% ~ (p=0.968 n=4+5)
UnmarshalDataset/twitter-32 56.9k ± 0% 56.9k ± 0% ~ (p=0.429 n=4+5)
UnmarshalDataset/code-32 1.05M ± 0% 1.05M ± 0% ~ (p=0.556 n=4+5)
UnmarshalDataset/example-32 1.36k ± 0% 1.36k ± 0% ~ (all equal)
Unmarshal/SimpleDocument/struct-32 9.00 ± 0% 9.00 ± 0% ~ (all equal)
Unmarshal/SimpleDocument/map-32 13.0 ± 0% 13.0 ± 0% ~ (all equal)
Unmarshal/ReferenceFile/struct-32 183 ± 0% 183 ± 0% ~ (all equal)
Unmarshal/ReferenceFile/map-32 642 ± 0% 642 ± 0% ~ (all equal)
Unmarshal/HugoFrontMatter-32 141 ± 0% 141 ± 0% ~ (all equal)
```
Fixes #807
2022-08-20 21:24:03 -04:00
Thomas Pelletier
7baa23f493
Decode: error on array table mismatched type ( #804 )
...
Prevent the decoder from continuing if it encounters a type it cannot decode an
array table into.
Fixes #799
2022-08-15 16:38:07 -04:00
Thomas Pelletier
fb6d1d6c2b
Marshal: define and fix newlines behavior when using omitempty ( #798 )
...
Ref #786
2022-07-24 15:40:20 -04:00
Thomas Pelletier
627dade0c7
Encode: support comment on array tables ( #776 )
...
Fixes #774
2022-05-10 15:17:36 +02:00
Thomas Pelletier
c5ca2c682b
Fix embedded struct with explicit field name ( #773 )
...
Fixes #772
2022-05-09 18:45:02 +02:00
Thomas Pelletier
8bbb673431
Fuzzing setup and fixes ( #755 )
...
* encode: fix localdate formatting
* encode: fix empty key marshaling
* encode: fix invalid quotation of time.Time
* encode: ensure control chars are escaped
* decode: always use UTC for zero tz
* encode: check for invalid characters in keys
* encode: always construct map for empty array tables
* fuzz: add go 1.18 fuzz test
* encode: handle NaNs
* encode: allow new lines in quoted keys
* encode: never emit table inside array
* encode: don't capitalize inf
2022-04-10 21:37:12 -04:00
Thomas Pelletier
89d7b412d8
decode: allow subtables to be defined later ( #750 )
...
Fixes #739
2022-04-07 21:49:16 -04:00
Cameron Moore
146f70ea8a
Decode: use cleaned byte slice throughout parseFloat ( #735 )
...
Fixes #734
2022-01-06 14:34:27 -05:00
Thomas Pelletier
e83cf535f5
Decoder: rename SetStrict to DisallowUnknownFields ( #731 )
2022-01-02 14:32:34 -05:00
Cameron Moore
128b7a8bfb
Decode: check buffer length before parsing simple key ( #717 )
...
Fixes #714
2021-12-29 08:58:42 -05:00
Cameron Moore
892df5c28e
Decode: fix index out of range bug ( #716 )
...
Fixes #715
2021-12-29 08:49:33 -05:00
Thomas Pelletier
8ce5c3d78f
Decoder: time allows extra precision ( #710 )
...
As discussed[1], this change allows times to provide precision beyond the
nanosecond (nine digits fractional part). Extra precision is truncated according
to the TOML specificiation.
[1]: https://github.com/pelletier/go-toml/discussions/707
2021-12-26 17:05:10 +01:00
Thomas Pelletier
177b4a5e53
Decode: allow \r\n as line whitespace before \ ( #709 )
...
Fixes #708
2021-12-26 16:38:15 +01:00
Cameron Moore
5cbdea6192
decode: fix maximum time offset values ( #706 )
...
According to RFC3339 section 5.6, the maximum time offset values for
hours and minutes is 23 and 59, respectively.
2021-12-22 10:29:52 +01:00
Thomas Pelletier
696dd25c17
Decoder: disallow modification of existing table ( #704 )
...
Fixes #703
2021-12-15 11:05:27 -05:00
Thomas Pelletier
facb2b13e8
Decoder: prevent modification of inline tables ( #702 )
...
Fixes #701
2021-12-12 09:43:42 -05:00
Cameron Moore
8bbb519477
Decode: ensure signed exponents don't start with an underscore ( #699 )
2021-12-05 20:02:19 -05:00
Cameron Moore
b37e11d74d
Decode: allow maximum seconds value of 60 ( #700 )
...
RFC3339 allows seconds to be 60 when adding leap seconds
2021-12-05 20:00:42 -05:00
Cameron Moore
6cd86876b8
Decode: ensure signed numbers don't start with an underscore ( #698 )
2021-12-04 16:56:48 -05:00
Cameron Moore
f53bc740c1
Decode: restrict timezone offset values ( #696 )
...
Don't allow hours greater than 24 and minutes greater than 60 per RFC
3339.
2021-12-02 18:59:32 -05:00
Thomas Pelletier
9bf9be681e
Decoder: check for invalid chars in timezone ( #695 )
...
Fixes #694
2021-12-02 09:00:20 -05:00
Thomas Pelletier
c862c344b3
Decoder: allow commas in tags ( #693 )
2021-11-30 21:59:22 -05:00
Thomas Pelletier
3990899d7e
Decoder: check tz has : between hours and minutes ( #691 )
...
Fixes #690
2021-11-30 20:22:11 -05:00
Cameron Moore
4c7a337083
Decoder: fix typo in test description ( #689 )
2021-11-30 15:28:01 -05:00
Thomas Pelletier
bbaae540ce
Decoder: check timezones start with +,-,z,Z ( #688 )
...
Also simplifies local time seconds scanning.
Fixes #686
2021-11-30 13:01:15 -05:00
Thomas Pelletier
ede6445608
Decoder: flag bad \r in literal multiline strings ( #687 )
...
Fixes #685
2021-11-30 10:44:48 -05:00
Thomas Pelletier
b226db6a29
Decoder: show struct field in type mismatch errors ( #684 )
...
The goal is to provide some context as to why the type were mismatched. This
change only works for that case, on structs. This is the same a encoding/json. A
more general solution would be great, but this would require a broader change in
the decoder, which I don't think is necessary at the moment.
Fixes #628
2021-11-24 20:43:56 -05:00
Thomas Pelletier
79e78b234c
Decoder: fix panic on table array behind a pointer ( #682 )
...
Fixes #677
2021-11-24 18:50:04 -05:00
Thomas Pelletier
1b5a25c0ef
Decoder: fail on unescaped \r not followed by \n ( #681 )
...
Fixes #674
2021-11-24 18:11:36 -05:00
Thomas Pelletier
8eae15b2ee
Decoder: validate bounds of day and month in dates ( #680 )
...
Fixes #676
2021-11-24 17:42:01 -05:00
Thomas Pelletier
2b3de620e8
Encoder: try to use pointer type TextMarshaler ( #679 )
...
If a type does not implement the encoding.TextMarshaler interface but
its pointer type does, use it if possible.
Fixes #678
2021-11-24 14:43:49 -05:00
Cameron Moore
8645d6376b
Decoder: flag invalid carriage returns in literal strings ( #673 )
2021-11-23 22:41:59 -05:00