build(deps): bump github.com/pelletier/go-toml/v2 from 2.1.1 to 2.2.0
Bumps [github.com/pelletier/go-toml/v2](https://github.com/pelletier/go-toml) from 2.1.1 to 2.2.0. - [Release notes](https://github.com/pelletier/go-toml/releases) - [Changelog](https://github.com/pelletier/go-toml/blob/v2/.goreleaser.yaml) - [Commits](https://github.com/pelletier/go-toml/compare/v2.1.1...v2.2.0) --- updated-dependencies: - dependency-name: github.com/pelletier/go-toml/v2 dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] <support@github.com>
This commit is contained in:
		
							
								
								
									
										31
									
								
								vendor/github.com/pelletier/go-toml/v2/CONTRIBUTING.md
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										31
									
								
								vendor/github.com/pelletier/go-toml/v2/CONTRIBUTING.md
									
									
									
										generated
									
									
										vendored
									
									
								
							@@ -165,25 +165,22 @@ Checklist:
 | 
			
		||||
 | 
			
		||||
### New release
 | 
			
		||||
 | 
			
		||||
1. Decide on the next version number. Use semver.
 | 
			
		||||
2. Generate release notes using [`gh`][gh]. Example:
 | 
			
		||||
1. Decide on the next version number. Use semver. Review commits since last
 | 
			
		||||
   version to assess.
 | 
			
		||||
2. Tag release. For example:
 | 
			
		||||
```
 | 
			
		||||
$ gh api -X POST \
 | 
			
		||||
  -F tag_name='v2.0.0-beta.5' \
 | 
			
		||||
  -F target_commitish='v2' \
 | 
			
		||||
  -F previous_tag_name='v2.0.0-beta.4' \
 | 
			
		||||
  --jq '.body' \
 | 
			
		||||
  repos/pelletier/go-toml/releases/generate-notes
 | 
			
		||||
git checkout v2
 | 
			
		||||
git pull
 | 
			
		||||
git tag v2.2.0
 | 
			
		||||
git push --tags
 | 
			
		||||
```
 | 
			
		||||
3. Look for "Other changes". That would indicate a pull request not labeled
 | 
			
		||||
   properly. Tweak labels and pull request titles until changelog looks good for
 | 
			
		||||
   users.
 | 
			
		||||
4. [Draft new release][new-release].
 | 
			
		||||
5. Fill tag and target with the same value used to generate the changelog.
 | 
			
		||||
6. Set title to the new tag value.
 | 
			
		||||
7. Paste the generated changelog.
 | 
			
		||||
8. Check "create discussion", in the "Releases" category.
 | 
			
		||||
9. Check pre-release if new version is an alpha or beta.
 | 
			
		||||
3. CI automatically builds a draft Github release. Review it and edit as
 | 
			
		||||
   necessary. Look for "Other changes". That would indicate a pull request not
 | 
			
		||||
   labeled properly. Tweak labels and pull request titles until changelog looks
 | 
			
		||||
   good for users.
 | 
			
		||||
4. Check "create discussion" box, in the "Releases" category.
 | 
			
		||||
5. If new version is an alpha or beta only, check pre-release box.
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
[issues-tracker]: https://github.com/pelletier/go-toml/issues
 | 
			
		||||
[bug-report]: https://github.com/pelletier/go-toml/issues/new?template=bug_report.md
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										117
									
								
								vendor/github.com/pelletier/go-toml/v2/README.md
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										117
									
								
								vendor/github.com/pelletier/go-toml/v2/README.md
									
									
									
										generated
									
									
										vendored
									
									
								
							@@ -98,9 +98,9 @@ Given the following struct, let's see how to read it and write it as TOML:
 | 
			
		||||
 | 
			
		||||
```go
 | 
			
		||||
type MyConfig struct {
 | 
			
		||||
      Version int
 | 
			
		||||
      Name    string
 | 
			
		||||
      Tags    []string
 | 
			
		||||
	Version int
 | 
			
		||||
	Name    string
 | 
			
		||||
	Tags    []string
 | 
			
		||||
}
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
@@ -119,7 +119,7 @@ tags = ["go", "toml"]
 | 
			
		||||
var cfg MyConfig
 | 
			
		||||
err := toml.Unmarshal([]byte(doc), &cfg)
 | 
			
		||||
if err != nil {
 | 
			
		||||
      panic(err)
 | 
			
		||||
	panic(err)
 | 
			
		||||
}
 | 
			
		||||
fmt.Println("version:", cfg.Version)
 | 
			
		||||
fmt.Println("name:", cfg.Name)
 | 
			
		||||
@@ -140,14 +140,14 @@ as a TOML document:
 | 
			
		||||
 | 
			
		||||
```go
 | 
			
		||||
cfg := MyConfig{
 | 
			
		||||
      Version: 2,
 | 
			
		||||
      Name:    "go-toml",
 | 
			
		||||
      Tags:    []string{"go", "toml"},
 | 
			
		||||
	Version: 2,
 | 
			
		||||
	Name:    "go-toml",
 | 
			
		||||
	Tags:    []string{"go", "toml"},
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
b, err := toml.Marshal(cfg)
 | 
			
		||||
if err != nil {
 | 
			
		||||
      panic(err)
 | 
			
		||||
	panic(err)
 | 
			
		||||
}
 | 
			
		||||
fmt.Println(string(b))
 | 
			
		||||
 | 
			
		||||
@@ -175,17 +175,17 @@ the AST level. See https://pkg.go.dev/github.com/pelletier/go-toml/v2/unstable.
 | 
			
		||||
Execution time speedup compared to other Go TOML libraries:
 | 
			
		||||
 | 
			
		||||
<table>
 | 
			
		||||
    <thead>
 | 
			
		||||
        <tr><th>Benchmark</th><th>go-toml v1</th><th>BurntSushi/toml</th></tr>
 | 
			
		||||
    </thead>
 | 
			
		||||
    <tbody>
 | 
			
		||||
        <tr><td>Marshal/HugoFrontMatter-2</td><td>1.9x</td><td>2.2x</td></tr>
 | 
			
		||||
        <tr><td>Marshal/ReferenceFile/map-2</td><td>1.7x</td><td>2.1x</td></tr>
 | 
			
		||||
        <tr><td>Marshal/ReferenceFile/struct-2</td><td>2.2x</td><td>3.0x</td></tr>
 | 
			
		||||
        <tr><td>Unmarshal/HugoFrontMatter-2</td><td>2.9x</td><td>2.7x</td></tr>
 | 
			
		||||
        <tr><td>Unmarshal/ReferenceFile/map-2</td><td>2.6x</td><td>2.7x</td></tr>
 | 
			
		||||
        <tr><td>Unmarshal/ReferenceFile/struct-2</td><td>4.6x</td><td>5.1x</td></tr>
 | 
			
		||||
     </tbody>
 | 
			
		||||
	<thead>
 | 
			
		||||
		<tr><th>Benchmark</th><th>go-toml v1</th><th>BurntSushi/toml</th></tr>
 | 
			
		||||
	</thead>
 | 
			
		||||
	<tbody>
 | 
			
		||||
		<tr><td>Marshal/HugoFrontMatter-2</td><td>1.9x</td><td>2.2x</td></tr>
 | 
			
		||||
		<tr><td>Marshal/ReferenceFile/map-2</td><td>1.7x</td><td>2.1x</td></tr>
 | 
			
		||||
		<tr><td>Marshal/ReferenceFile/struct-2</td><td>2.2x</td><td>3.0x</td></tr>
 | 
			
		||||
		<tr><td>Unmarshal/HugoFrontMatter-2</td><td>2.9x</td><td>2.7x</td></tr>
 | 
			
		||||
		<tr><td>Unmarshal/ReferenceFile/map-2</td><td>2.6x</td><td>2.7x</td></tr>
 | 
			
		||||
		<tr><td>Unmarshal/ReferenceFile/struct-2</td><td>4.6x</td><td>5.1x</td></tr>
 | 
			
		||||
	 </tbody>
 | 
			
		||||
</table>
 | 
			
		||||
<details><summary>See more</summary>
 | 
			
		||||
<p>The table above has the results of the most common use-cases. The table below
 | 
			
		||||
@@ -193,22 +193,22 @@ contains the results of all benchmarks, including unrealistic ones. It is
 | 
			
		||||
provided for completeness.</p>
 | 
			
		||||
 | 
			
		||||
<table>
 | 
			
		||||
    <thead>
 | 
			
		||||
        <tr><th>Benchmark</th><th>go-toml v1</th><th>BurntSushi/toml</th></tr>
 | 
			
		||||
    </thead>
 | 
			
		||||
    <tbody>
 | 
			
		||||
        <tr><td>Marshal/SimpleDocument/map-2</td><td>1.8x</td><td>2.7x</td></tr>
 | 
			
		||||
        <tr><td>Marshal/SimpleDocument/struct-2</td><td>2.7x</td><td>3.8x</td></tr>
 | 
			
		||||
        <tr><td>Unmarshal/SimpleDocument/map-2</td><td>3.8x</td><td>3.0x</td></tr>
 | 
			
		||||
        <tr><td>Unmarshal/SimpleDocument/struct-2</td><td>5.6x</td><td>4.1x</td></tr>
 | 
			
		||||
        <tr><td>UnmarshalDataset/example-2</td><td>3.0x</td><td>3.2x</td></tr>
 | 
			
		||||
        <tr><td>UnmarshalDataset/code-2</td><td>2.3x</td><td>2.9x</td></tr>
 | 
			
		||||
        <tr><td>UnmarshalDataset/twitter-2</td><td>2.6x</td><td>2.7x</td></tr>
 | 
			
		||||
        <tr><td>UnmarshalDataset/citm_catalog-2</td><td>2.2x</td><td>2.3x</td></tr>
 | 
			
		||||
        <tr><td>UnmarshalDataset/canada-2</td><td>1.8x</td><td>1.5x</td></tr>
 | 
			
		||||
        <tr><td>UnmarshalDataset/config-2</td><td>4.1x</td><td>2.9x</td></tr>
 | 
			
		||||
        <tr><td>geomean</td><td>2.7x</td><td>2.8x</td></tr>
 | 
			
		||||
     </tbody>
 | 
			
		||||
	<thead>
 | 
			
		||||
		<tr><th>Benchmark</th><th>go-toml v1</th><th>BurntSushi/toml</th></tr>
 | 
			
		||||
	</thead>
 | 
			
		||||
	<tbody>
 | 
			
		||||
		<tr><td>Marshal/SimpleDocument/map-2</td><td>1.8x</td><td>2.7x</td></tr>
 | 
			
		||||
		<tr><td>Marshal/SimpleDocument/struct-2</td><td>2.7x</td><td>3.8x</td></tr>
 | 
			
		||||
		<tr><td>Unmarshal/SimpleDocument/map-2</td><td>3.8x</td><td>3.0x</td></tr>
 | 
			
		||||
		<tr><td>Unmarshal/SimpleDocument/struct-2</td><td>5.6x</td><td>4.1x</td></tr>
 | 
			
		||||
		<tr><td>UnmarshalDataset/example-2</td><td>3.0x</td><td>3.2x</td></tr>
 | 
			
		||||
		<tr><td>UnmarshalDataset/code-2</td><td>2.3x</td><td>2.9x</td></tr>
 | 
			
		||||
		<tr><td>UnmarshalDataset/twitter-2</td><td>2.6x</td><td>2.7x</td></tr>
 | 
			
		||||
		<tr><td>UnmarshalDataset/citm_catalog-2</td><td>2.2x</td><td>2.3x</td></tr>
 | 
			
		||||
		<tr><td>UnmarshalDataset/canada-2</td><td>1.8x</td><td>1.5x</td></tr>
 | 
			
		||||
		<tr><td>UnmarshalDataset/config-2</td><td>4.1x</td><td>2.9x</td></tr>
 | 
			
		||||
		<tr><td>geomean</td><td>2.7x</td><td>2.8x</td></tr>
 | 
			
		||||
	 </tbody>
 | 
			
		||||
</table>
 | 
			
		||||
<p>This table can be generated with <code>./ci.sh benchmark -a -html</code>.</p>
 | 
			
		||||
</details>
 | 
			
		||||
@@ -233,24 +233,24 @@ Go-toml provides three handy command line tools:
 | 
			
		||||
 | 
			
		||||
 * `tomljson`: Reads a TOML file and outputs its JSON representation.
 | 
			
		||||
 | 
			
		||||
    ```
 | 
			
		||||
    $ go install github.com/pelletier/go-toml/v2/cmd/tomljson@latest
 | 
			
		||||
    $ tomljson --help
 | 
			
		||||
    ```
 | 
			
		||||
	```
 | 
			
		||||
	$ go install github.com/pelletier/go-toml/v2/cmd/tomljson@latest
 | 
			
		||||
	$ tomljson --help
 | 
			
		||||
	```
 | 
			
		||||
 | 
			
		||||
 * `jsontoml`: Reads a JSON file and outputs a TOML representation.
 | 
			
		||||
 | 
			
		||||
    ```
 | 
			
		||||
    $ go install github.com/pelletier/go-toml/v2/cmd/jsontoml@latest
 | 
			
		||||
    $ jsontoml --help
 | 
			
		||||
    ```
 | 
			
		||||
	```
 | 
			
		||||
	$ go install github.com/pelletier/go-toml/v2/cmd/jsontoml@latest
 | 
			
		||||
	$ jsontoml --help
 | 
			
		||||
	```
 | 
			
		||||
 | 
			
		||||
 * `tomll`: Lints and reformats a TOML file.
 | 
			
		||||
 | 
			
		||||
    ```
 | 
			
		||||
    $ go install github.com/pelletier/go-toml/v2/cmd/tomll@latest
 | 
			
		||||
    $ tomll --help
 | 
			
		||||
    ```
 | 
			
		||||
	```
 | 
			
		||||
	$ go install github.com/pelletier/go-toml/v2/cmd/tomll@latest
 | 
			
		||||
	$ tomll --help
 | 
			
		||||
	```
 | 
			
		||||
 | 
			
		||||
### Docker image
 | 
			
		||||
 | 
			
		||||
@@ -261,7 +261,7 @@ Those tools are also available as a [Docker image][docker]. For example, to use
 | 
			
		||||
docker run -i ghcr.io/pelletier/go-toml:v2 tomljson < example.toml
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
Multiple versions are availble on [ghcr.io][docker].
 | 
			
		||||
Multiple versions are available on [ghcr.io][docker].
 | 
			
		||||
 | 
			
		||||
[docker]: https://github.com/pelletier/go-toml/pkgs/container/go-toml
 | 
			
		||||
 | 
			
		||||
@@ -293,16 +293,16 @@ element in the interface to decode the object. For example:
 | 
			
		||||
 | 
			
		||||
```go
 | 
			
		||||
type inner struct {
 | 
			
		||||
  B interface{}
 | 
			
		||||
	B interface{}
 | 
			
		||||
}
 | 
			
		||||
type doc struct {
 | 
			
		||||
  A interface{}
 | 
			
		||||
	A interface{}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
d := doc{
 | 
			
		||||
  A: inner{
 | 
			
		||||
    B: "Before",
 | 
			
		||||
  },
 | 
			
		||||
	A: inner{
 | 
			
		||||
		B: "Before",
 | 
			
		||||
	},
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
data := `
 | 
			
		||||
@@ -341,7 +341,7 @@ contained in the doc is superior to the capacity of the array. For example:
 | 
			
		||||
 | 
			
		||||
```go
 | 
			
		||||
type doc struct {
 | 
			
		||||
  A [2]string
 | 
			
		||||
	A [2]string
 | 
			
		||||
}
 | 
			
		||||
d := doc{}
 | 
			
		||||
err := toml.Unmarshal([]byte(`A = ["one", "two", "many"]`), &d)
 | 
			
		||||
@@ -565,10 +565,11 @@ complete solutions exist out there.
 | 
			
		||||
 | 
			
		||||
## Versioning
 | 
			
		||||
 | 
			
		||||
Go-toml follows [Semantic Versioning](https://semver.org). The supported version
 | 
			
		||||
of [TOML](https://github.com/toml-lang/toml) is indicated at the beginning of
 | 
			
		||||
this document. The last two major versions of Go are supported
 | 
			
		||||
(see [Go Release Policy](https://golang.org/doc/devel/release.html#policy)).
 | 
			
		||||
Expect for parts explicitely marked otherwise, go-toml follows [Semantic
 | 
			
		||||
Versioning](https://semver.org). The supported version of
 | 
			
		||||
[TOML](https://github.com/toml-lang/toml) is indicated at the beginning of this
 | 
			
		||||
document. The last two major versions of Go are supported (see [Go Release
 | 
			
		||||
Policy](https://golang.org/doc/devel/release.html#policy)).
 | 
			
		||||
 | 
			
		||||
## License
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										62
									
								
								vendor/github.com/pelletier/go-toml/v2/internal/tracker/seen.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										62
									
								
								vendor/github.com/pelletier/go-toml/v2/internal/tracker/seen.go
									
									
									
										generated
									
									
										vendored
									
									
								
							@@ -149,8 +149,9 @@ func (s *SeenTracker) setExplicitFlag(parentIdx int) {
 | 
			
		||||
 | 
			
		||||
// CheckExpression takes a top-level node and checks that it does not contain
 | 
			
		||||
// keys that have been seen in previous calls, and validates that types are
 | 
			
		||||
// consistent.
 | 
			
		||||
func (s *SeenTracker) CheckExpression(node *unstable.Node) error {
 | 
			
		||||
// consistent. It returns true if it is the first time this node's key is seen.
 | 
			
		||||
// Useful to clear array tables on first use.
 | 
			
		||||
func (s *SeenTracker) CheckExpression(node *unstable.Node) (bool, error) {
 | 
			
		||||
	if s.entries == nil {
 | 
			
		||||
		s.reset()
 | 
			
		||||
	}
 | 
			
		||||
@@ -166,7 +167,7 @@ func (s *SeenTracker) CheckExpression(node *unstable.Node) error {
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (s *SeenTracker) checkTable(node *unstable.Node) error {
 | 
			
		||||
func (s *SeenTracker) checkTable(node *unstable.Node) (bool, error) {
 | 
			
		||||
	if s.currentIdx >= 0 {
 | 
			
		||||
		s.setExplicitFlag(s.currentIdx)
 | 
			
		||||
	}
 | 
			
		||||
@@ -192,7 +193,7 @@ func (s *SeenTracker) checkTable(node *unstable.Node) error {
 | 
			
		||||
		} else {
 | 
			
		||||
			entry := s.entries[idx]
 | 
			
		||||
			if entry.kind == valueKind {
 | 
			
		||||
				return fmt.Errorf("toml: expected %s to be a table, not a %s", string(k), entry.kind)
 | 
			
		||||
				return false, fmt.Errorf("toml: expected %s to be a table, not a %s", string(k), entry.kind)
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
		parentIdx = idx
 | 
			
		||||
@@ -201,25 +202,27 @@ func (s *SeenTracker) checkTable(node *unstable.Node) error {
 | 
			
		||||
	k := it.Node().Data
 | 
			
		||||
	idx := s.find(parentIdx, k)
 | 
			
		||||
 | 
			
		||||
	first := false
 | 
			
		||||
	if idx >= 0 {
 | 
			
		||||
		kind := s.entries[idx].kind
 | 
			
		||||
		if kind != tableKind {
 | 
			
		||||
			return fmt.Errorf("toml: key %s should be a table, not a %s", string(k), kind)
 | 
			
		||||
			return false, fmt.Errorf("toml: key %s should be a table, not a %s", string(k), kind)
 | 
			
		||||
		}
 | 
			
		||||
		if s.entries[idx].explicit {
 | 
			
		||||
			return fmt.Errorf("toml: table %s already exists", string(k))
 | 
			
		||||
			return false, fmt.Errorf("toml: table %s already exists", string(k))
 | 
			
		||||
		}
 | 
			
		||||
		s.entries[idx].explicit = true
 | 
			
		||||
	} else {
 | 
			
		||||
		idx = s.create(parentIdx, k, tableKind, true, false)
 | 
			
		||||
		first = true
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	s.currentIdx = idx
 | 
			
		||||
 | 
			
		||||
	return nil
 | 
			
		||||
	return first, nil
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (s *SeenTracker) checkArrayTable(node *unstable.Node) error {
 | 
			
		||||
func (s *SeenTracker) checkArrayTable(node *unstable.Node) (bool, error) {
 | 
			
		||||
	if s.currentIdx >= 0 {
 | 
			
		||||
		s.setExplicitFlag(s.currentIdx)
 | 
			
		||||
	}
 | 
			
		||||
@@ -242,7 +245,7 @@ func (s *SeenTracker) checkArrayTable(node *unstable.Node) error {
 | 
			
		||||
		} else {
 | 
			
		||||
			entry := s.entries[idx]
 | 
			
		||||
			if entry.kind == valueKind {
 | 
			
		||||
				return fmt.Errorf("toml: expected %s to be a table, not a %s", string(k), entry.kind)
 | 
			
		||||
				return false, fmt.Errorf("toml: expected %s to be a table, not a %s", string(k), entry.kind)
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
@@ -252,22 +255,23 @@ func (s *SeenTracker) checkArrayTable(node *unstable.Node) error {
 | 
			
		||||
	k := it.Node().Data
 | 
			
		||||
	idx := s.find(parentIdx, k)
 | 
			
		||||
 | 
			
		||||
	if idx >= 0 {
 | 
			
		||||
	firstTime := idx < 0
 | 
			
		||||
	if firstTime {
 | 
			
		||||
		idx = s.create(parentIdx, k, arrayTableKind, true, false)
 | 
			
		||||
	} else {
 | 
			
		||||
		kind := s.entries[idx].kind
 | 
			
		||||
		if kind != arrayTableKind {
 | 
			
		||||
			return fmt.Errorf("toml: key %s already exists as a %s,  but should be an array table", kind, string(k))
 | 
			
		||||
			return false, fmt.Errorf("toml: key %s already exists as a %s,  but should be an array table", kind, string(k))
 | 
			
		||||
		}
 | 
			
		||||
		s.clear(idx)
 | 
			
		||||
	} else {
 | 
			
		||||
		idx = s.create(parentIdx, k, arrayTableKind, true, false)
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	s.currentIdx = idx
 | 
			
		||||
 | 
			
		||||
	return nil
 | 
			
		||||
	return firstTime, nil
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (s *SeenTracker) checkKeyValue(node *unstable.Node) error {
 | 
			
		||||
func (s *SeenTracker) checkKeyValue(node *unstable.Node) (bool, error) {
 | 
			
		||||
	parentIdx := s.currentIdx
 | 
			
		||||
	it := node.Key()
 | 
			
		||||
 | 
			
		||||
@@ -281,11 +285,11 @@ func (s *SeenTracker) checkKeyValue(node *unstable.Node) error {
 | 
			
		||||
		} else {
 | 
			
		||||
			entry := s.entries[idx]
 | 
			
		||||
			if it.IsLast() {
 | 
			
		||||
				return fmt.Errorf("toml: key %s is already defined", string(k))
 | 
			
		||||
				return false, fmt.Errorf("toml: key %s is already defined", string(k))
 | 
			
		||||
			} else if entry.kind != tableKind {
 | 
			
		||||
				return fmt.Errorf("toml: expected %s to be a table, not a %s", string(k), entry.kind)
 | 
			
		||||
				return false, fmt.Errorf("toml: expected %s to be a table, not a %s", string(k), entry.kind)
 | 
			
		||||
			} else if entry.explicit {
 | 
			
		||||
				return fmt.Errorf("toml: cannot redefine table %s that has already been explicitly defined", string(k))
 | 
			
		||||
				return false, fmt.Errorf("toml: cannot redefine table %s that has already been explicitly defined", string(k))
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
@@ -303,30 +307,30 @@ func (s *SeenTracker) checkKeyValue(node *unstable.Node) error {
 | 
			
		||||
		return s.checkArray(value)
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	return nil
 | 
			
		||||
	return false, nil
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (s *SeenTracker) checkArray(node *unstable.Node) error {
 | 
			
		||||
func (s *SeenTracker) checkArray(node *unstable.Node) (first bool, err error) {
 | 
			
		||||
	it := node.Children()
 | 
			
		||||
	for it.Next() {
 | 
			
		||||
		n := it.Node()
 | 
			
		||||
		switch n.Kind {
 | 
			
		||||
		case unstable.InlineTable:
 | 
			
		||||
			err := s.checkInlineTable(n)
 | 
			
		||||
			first, err = s.checkInlineTable(n)
 | 
			
		||||
			if err != nil {
 | 
			
		||||
				return err
 | 
			
		||||
				return false, err
 | 
			
		||||
			}
 | 
			
		||||
		case unstable.Array:
 | 
			
		||||
			err := s.checkArray(n)
 | 
			
		||||
			first, err = s.checkArray(n)
 | 
			
		||||
			if err != nil {
 | 
			
		||||
				return err
 | 
			
		||||
				return false, err
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
	return nil
 | 
			
		||||
	return first, nil
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (s *SeenTracker) checkInlineTable(node *unstable.Node) error {
 | 
			
		||||
func (s *SeenTracker) checkInlineTable(node *unstable.Node) (first bool, err error) {
 | 
			
		||||
	if pool.New == nil {
 | 
			
		||||
		pool.New = func() interface{} {
 | 
			
		||||
			return &SeenTracker{}
 | 
			
		||||
@@ -339,9 +343,9 @@ func (s *SeenTracker) checkInlineTable(node *unstable.Node) error {
 | 
			
		||||
	it := node.Children()
 | 
			
		||||
	for it.Next() {
 | 
			
		||||
		n := it.Node()
 | 
			
		||||
		err := s.checkKeyValue(n)
 | 
			
		||||
		first, err = s.checkKeyValue(n)
 | 
			
		||||
		if err != nil {
 | 
			
		||||
			return err
 | 
			
		||||
			return false, err
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
@@ -352,5 +356,5 @@ func (s *SeenTracker) checkInlineTable(node *unstable.Node) error {
 | 
			
		||||
	// redefinition of its keys: check* functions cannot walk into
 | 
			
		||||
	// a value.
 | 
			
		||||
	pool.Put(s)
 | 
			
		||||
	return nil
 | 
			
		||||
	return first, nil
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										35
									
								
								vendor/github.com/pelletier/go-toml/v2/marshaler.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										35
									
								
								vendor/github.com/pelletier/go-toml/v2/marshaler.go
									
									
									
										generated
									
									
										vendored
									
									
								
							@@ -3,6 +3,7 @@ package toml
 | 
			
		||||
import (
 | 
			
		||||
	"bytes"
 | 
			
		||||
	"encoding"
 | 
			
		||||
	"encoding/json"
 | 
			
		||||
	"fmt"
 | 
			
		||||
	"io"
 | 
			
		||||
	"math"
 | 
			
		||||
@@ -37,10 +38,11 @@ type Encoder struct {
 | 
			
		||||
	w io.Writer
 | 
			
		||||
 | 
			
		||||
	// global settings
 | 
			
		||||
	tablesInline    bool
 | 
			
		||||
	arraysMultiline bool
 | 
			
		||||
	indentSymbol    string
 | 
			
		||||
	indentTables    bool
 | 
			
		||||
	tablesInline       bool
 | 
			
		||||
	arraysMultiline    bool
 | 
			
		||||
	indentSymbol       string
 | 
			
		||||
	indentTables       bool
 | 
			
		||||
	marshalJsonNumbers bool
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// NewEncoder returns a new Encoder that writes to w.
 | 
			
		||||
@@ -87,6 +89,17 @@ func (enc *Encoder) SetIndentTables(indent bool) *Encoder {
 | 
			
		||||
	return enc
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// SetMarshalJsonNumbers forces the encoder to serialize `json.Number` as a
 | 
			
		||||
// float or integer instead of relying on TextMarshaler to emit a string.
 | 
			
		||||
//
 | 
			
		||||
// *Unstable:* This method does not follow the compatibility guarantees of
 | 
			
		||||
// semver. It can be changed or removed without a new major version being
 | 
			
		||||
// issued.
 | 
			
		||||
func (enc *Encoder) SetMarshalJsonNumbers(indent bool) *Encoder {
 | 
			
		||||
	enc.marshalJsonNumbers = indent
 | 
			
		||||
	return enc
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// Encode writes a TOML representation of v to the stream.
 | 
			
		||||
//
 | 
			
		||||
// If v cannot be represented to TOML it returns an error.
 | 
			
		||||
@@ -252,6 +265,18 @@ func (enc *Encoder) encode(b []byte, ctx encoderCtx, v reflect.Value) ([]byte, e
 | 
			
		||||
		return append(b, x.String()...), nil
 | 
			
		||||
	case LocalDateTime:
 | 
			
		||||
		return append(b, x.String()...), nil
 | 
			
		||||
	case json.Number:
 | 
			
		||||
		if enc.marshalJsonNumbers {
 | 
			
		||||
			if x == "" { /// Useful zero value.
 | 
			
		||||
				return append(b, "0"...), nil
 | 
			
		||||
			} else if v, err := x.Int64(); err == nil {
 | 
			
		||||
				return enc.encode(b, ctx, reflect.ValueOf(v))
 | 
			
		||||
			} else if f, err := x.Float64(); err == nil {
 | 
			
		||||
				return enc.encode(b, ctx, reflect.ValueOf(f))
 | 
			
		||||
			} else {
 | 
			
		||||
				return nil, fmt.Errorf("toml: unable to convert %q to int64 or float64", x)
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	hasTextMarshaler := v.Type().Implements(textMarshalerType)
 | 
			
		||||
@@ -707,6 +732,8 @@ func walkStruct(ctx encoderCtx, t *table, v reflect.Value) {
 | 
			
		||||
			if fieldType.Anonymous {
 | 
			
		||||
				if fieldType.Type.Kind() == reflect.Struct {
 | 
			
		||||
					walkStruct(ctx, t, f)
 | 
			
		||||
				} else if fieldType.Type.Kind() == reflect.Pointer && !f.IsNil() && f.Elem().Kind() == reflect.Struct {
 | 
			
		||||
					walkStruct(ctx, t, f.Elem())
 | 
			
		||||
				}
 | 
			
		||||
				continue
 | 
			
		||||
			} else {
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										51
									
								
								vendor/github.com/pelletier/go-toml/v2/unmarshaler.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										51
									
								
								vendor/github.com/pelletier/go-toml/v2/unmarshaler.go
									
									
									
										generated
									
									
										vendored
									
									
								
							@@ -35,6 +35,9 @@ type Decoder struct {
 | 
			
		||||
 | 
			
		||||
	// global settings
 | 
			
		||||
	strict bool
 | 
			
		||||
 | 
			
		||||
	// toggles unmarshaler interface
 | 
			
		||||
	unmarshalerInterface bool
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// NewDecoder creates a new Decoder that will read from r.
 | 
			
		||||
@@ -54,6 +57,24 @@ func (d *Decoder) DisallowUnknownFields() *Decoder {
 | 
			
		||||
	return d
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// EnableUnmarshalerInterface allows to enable unmarshaler interface.
 | 
			
		||||
//
 | 
			
		||||
// With this feature enabled, types implementing the unstable/Unmarshaler
 | 
			
		||||
// interface can be decoded from any structure of the document. It allows types
 | 
			
		||||
// that don't have a straightfoward TOML representation to provide their own
 | 
			
		||||
// decoding logic.
 | 
			
		||||
//
 | 
			
		||||
// Currently, types can only decode from a single value. Tables and array tables
 | 
			
		||||
// are not supported.
 | 
			
		||||
//
 | 
			
		||||
// *Unstable:* This method does not follow the compatibility guarantees of
 | 
			
		||||
// semver. It can be changed or removed without a new major version being
 | 
			
		||||
// issued.
 | 
			
		||||
func (d *Decoder) EnableUnmarshalerInterface() *Decoder {
 | 
			
		||||
	d.unmarshalerInterface = true
 | 
			
		||||
	return d
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// Decode the whole content of r into v.
 | 
			
		||||
//
 | 
			
		||||
// By default, values in the document that don't exist in the target Go value
 | 
			
		||||
@@ -108,6 +129,7 @@ func (d *Decoder) Decode(v interface{}) error {
 | 
			
		||||
		strict: strict{
 | 
			
		||||
			Enabled: d.strict,
 | 
			
		||||
		},
 | 
			
		||||
		unmarshalerInterface: d.unmarshalerInterface,
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	return dec.FromParser(v)
 | 
			
		||||
@@ -127,6 +149,10 @@ type decoder struct {
 | 
			
		||||
	// need to be skipped.
 | 
			
		||||
	skipUntilTable bool
 | 
			
		||||
 | 
			
		||||
	// Flag indicating that the current array/slice table should be cleared because
 | 
			
		||||
	// it is the first encounter of an array table.
 | 
			
		||||
	clearArrayTable bool
 | 
			
		||||
 | 
			
		||||
	// Tracks position in Go arrays.
 | 
			
		||||
	// This is used when decoding [[array tables]] into Go arrays. Given array
 | 
			
		||||
	// tables are separate TOML expression, we need to keep track of where we
 | 
			
		||||
@@ -139,6 +165,9 @@ type decoder struct {
 | 
			
		||||
	// Strict mode
 | 
			
		||||
	strict strict
 | 
			
		||||
 | 
			
		||||
	// Flag that enables/disables unmarshaler interface.
 | 
			
		||||
	unmarshalerInterface bool
 | 
			
		||||
 | 
			
		||||
	// Current context for the error.
 | 
			
		||||
	errorContext *errorContext
 | 
			
		||||
}
 | 
			
		||||
@@ -246,9 +275,10 @@ Rules for the unmarshal code:
 | 
			
		||||
func (d *decoder) handleRootExpression(expr *unstable.Node, v reflect.Value) error {
 | 
			
		||||
	var x reflect.Value
 | 
			
		||||
	var err error
 | 
			
		||||
	var first bool // used for to clear array tables on first use
 | 
			
		||||
 | 
			
		||||
	if !(d.skipUntilTable && expr.Kind == unstable.KeyValue) {
 | 
			
		||||
		err = d.seen.CheckExpression(expr)
 | 
			
		||||
		first, err = d.seen.CheckExpression(expr)
 | 
			
		||||
		if err != nil {
 | 
			
		||||
			return err
 | 
			
		||||
		}
 | 
			
		||||
@@ -267,6 +297,7 @@ func (d *decoder) handleRootExpression(expr *unstable.Node, v reflect.Value) err
 | 
			
		||||
	case unstable.ArrayTable:
 | 
			
		||||
		d.skipUntilTable = false
 | 
			
		||||
		d.strict.EnterArrayTable(expr)
 | 
			
		||||
		d.clearArrayTable = first
 | 
			
		||||
		x, err = d.handleArrayTable(expr.Key(), v)
 | 
			
		||||
	default:
 | 
			
		||||
		panic(fmt.Errorf("parser should not permit expression of kind %s at document root", expr.Kind))
 | 
			
		||||
@@ -307,6 +338,10 @@ func (d *decoder) handleArrayTableCollectionLast(key unstable.Iterator, v reflec
 | 
			
		||||
				reflect.Copy(nelem, elem)
 | 
			
		||||
				elem = nelem
 | 
			
		||||
			}
 | 
			
		||||
			if d.clearArrayTable && elem.Len() > 0 {
 | 
			
		||||
				elem.SetLen(0)
 | 
			
		||||
				d.clearArrayTable = false
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
		return d.handleArrayTableCollectionLast(key, elem)
 | 
			
		||||
	case reflect.Ptr:
 | 
			
		||||
@@ -325,6 +360,10 @@ func (d *decoder) handleArrayTableCollectionLast(key unstable.Iterator, v reflec
 | 
			
		||||
 | 
			
		||||
		return v, nil
 | 
			
		||||
	case reflect.Slice:
 | 
			
		||||
		if d.clearArrayTable && v.Len() > 0 {
 | 
			
		||||
			v.SetLen(0)
 | 
			
		||||
			d.clearArrayTable = false
 | 
			
		||||
		}
 | 
			
		||||
		elemType := v.Type().Elem()
 | 
			
		||||
		var elem reflect.Value
 | 
			
		||||
		if elemType.Kind() == reflect.Interface {
 | 
			
		||||
@@ -576,7 +615,7 @@ func (d *decoder) handleKeyValues(v reflect.Value) (reflect.Value, error) {
 | 
			
		||||
			break
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		err := d.seen.CheckExpression(expr)
 | 
			
		||||
		_, err := d.seen.CheckExpression(expr)
 | 
			
		||||
		if err != nil {
 | 
			
		||||
			return reflect.Value{}, err
 | 
			
		||||
		}
 | 
			
		||||
@@ -634,6 +673,14 @@ func (d *decoder) handleValue(value *unstable.Node, v reflect.Value) error {
 | 
			
		||||
		v = initAndDereferencePointer(v)
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	if d.unmarshalerInterface {
 | 
			
		||||
		if v.CanAddr() && v.Addr().CanInterface() {
 | 
			
		||||
			if outi, ok := v.Addr().Interface().(unstable.Unmarshaler); ok {
 | 
			
		||||
				return outi.UnmarshalTOML(value)
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	ok, err := d.tryTextUnmarshaler(value, v)
 | 
			
		||||
	if ok || err != nil {
 | 
			
		||||
		return err
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										7
									
								
								vendor/github.com/pelletier/go-toml/v2/unstable/unmarshaler.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										7
									
								
								vendor/github.com/pelletier/go-toml/v2/unstable/unmarshaler.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1,7 @@
 | 
			
		||||
package unstable
 | 
			
		||||
 | 
			
		||||
// The Unmarshaler interface may be implemented by types to customize their
 | 
			
		||||
// behavior when being unmarshaled from a TOML document.
 | 
			
		||||
type Unmarshaler interface {
 | 
			
		||||
	UnmarshalTOML(value *Node) error
 | 
			
		||||
}
 | 
			
		||||
		Reference in New Issue
	
	Block a user