feat: add OffsetDateTime, nesting limits and uniform Marshaler dispatch
Test / test (push) Successful in 2m18s
Test / test (push) Successful in 2m18s
Assisted-by: DeepSeek V4.1 Flash
This commit is contained in:
@@ -28,6 +28,18 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
||||
at most `threshold` bytes is written as an inline table instead of a header
|
||||
section, which shortens a document of small tables. An array of tables keeps
|
||||
its header form, because its inline form would re-parse as a value array.
|
||||
- `OffsetDateTime`, the Go type of the offset date-time kind, so that all four
|
||||
TOML date-time kinds have one of their own. `Parse` and `Unmarshal` hand it
|
||||
back where they produced a bare `time.Time` before, and `Marshal` accepts it.
|
||||
Unmarshalling into a struct field of type `time.Time` keeps working, because
|
||||
the plain type takes an offset date-time as it always did; code that asserts
|
||||
the tree's type, and `UnmarshalTOML` implementations that expect a
|
||||
`time.Time`, need the new type.
|
||||
- `Decoder.MaxDepth(depth)` and `Decoder.MaxInputSize(size)` bound the parse a
|
||||
`Decode` performs, and every parse carries a nesting limit in any case
|
||||
(10000 levels, which no hand-written document approaches): a document that
|
||||
nests arrays or inline tables deeper used to run the stack out and is now
|
||||
rejected with a `SyntaxError` naming the limit.
|
||||
|
||||
### Changed
|
||||
|
||||
@@ -40,6 +52,13 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
||||
- An inline table that would pass the hundredth column is written across lines
|
||||
with a trailing comma and one tab of indentation per nesting level, the shape
|
||||
TOML 1.1 allows an inline table to take.
|
||||
- `MarshalTOML` reaches every array element and every field, whatever the Go
|
||||
kind, and its result is normalised like any other value: an element rendering
|
||||
itself as a table keeps the `[[header]]` form, one rendering itself as a
|
||||
scalar turns the array into a value array, and the method runs once per
|
||||
element. It is found on the addressable pointer as well, so a
|
||||
pointer-receiver `MarshalTOML` is called for a field or an element, exactly
|
||||
as `MarshalText` is.
|
||||
- TOML 1.1 is the acceptance contract, and TOML 1.0 is not. The compliance
|
||||
suite runs the 1.1 corpus alone, and the promise that every 1.0 document
|
||||
parses exactly as before is withdrawn. Nothing that parses today stops
|
||||
|
||||
Reference in New Issue
Block a user