mirror of
				https://github.com/superseriousbusiness/gotosocial.git
				synced 2025-10-31 14:32:24 -05:00 
			
		
		
		
	[chore]: Bump github.com/gin-contrib/gzip from 0.0.6 to 1.0.0 (#2781)
This commit is contained in:
		
					parent
					
						
							
								7f4a0a1aeb
							
						
					
				
			
			
				commit
				
					
						40ee470536
					
				
			
		
					 105 changed files with 81065 additions and 43757 deletions
				
			
		
							
								
								
									
										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 | ||||
| } | ||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue