mirror of
				https://github.com/superseriousbusiness/gotosocial.git
				synced 2025-11-03 23:52:26 -06:00 
			
		
		
		
	[chore]: Bump github.com/spf13/viper from 1.19.0 to 1.20.0
Bumps [github.com/spf13/viper](https://github.com/spf13/viper) from 1.19.0 to 1.20.0. - [Release notes](https://github.com/spf13/viper/releases) - [Commits](https://github.com/spf13/viper/compare/v1.19.0...v1.20.0) --- updated-dependencies: - dependency-name: github.com/spf13/viper dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] <support@github.com>
This commit is contained in:
		
					parent
					
						
							
								d3c3d34aae
							
						
					
				
			
			
				commit
				
					
						4183b5f5ce
					
				
			
		
					 146 changed files with 4637 additions and 18493 deletions
				
			
		
							
								
								
									
										18
									
								
								vendor/github.com/go-viper/mapstructure/v2/.editorconfig
									
										
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										18
									
								
								vendor/github.com/go-viper/mapstructure/v2/.editorconfig
									
										
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,18 @@
 | 
			
		|||
root = true
 | 
			
		||||
 | 
			
		||||
[*]
 | 
			
		||||
charset = utf-8
 | 
			
		||||
end_of_line = lf
 | 
			
		||||
indent_size = 4
 | 
			
		||||
indent_style = space
 | 
			
		||||
insert_final_newline = true
 | 
			
		||||
trim_trailing_whitespace = true
 | 
			
		||||
 | 
			
		||||
[*.go]
 | 
			
		||||
indent_style = tab
 | 
			
		||||
 | 
			
		||||
[{Makefile,*.mk}]
 | 
			
		||||
indent_style = tab
 | 
			
		||||
 | 
			
		||||
[*.nix]
 | 
			
		||||
indent_size = 2
 | 
			
		||||
							
								
								
									
										6
									
								
								vendor/github.com/go-viper/mapstructure/v2/.gitignore
									
										
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										6
									
								
								vendor/github.com/go-viper/mapstructure/v2/.gitignore
									
										
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,6 @@
 | 
			
		|||
/.devenv/
 | 
			
		||||
/.direnv/
 | 
			
		||||
/.pre-commit-config.yaml
 | 
			
		||||
/bin/
 | 
			
		||||
/build/
 | 
			
		||||
/var/
 | 
			
		||||
							
								
								
									
										23
									
								
								vendor/github.com/go-viper/mapstructure/v2/.golangci.yaml
									
										
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										23
									
								
								vendor/github.com/go-viper/mapstructure/v2/.golangci.yaml
									
										
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,23 @@
 | 
			
		|||
run:
 | 
			
		||||
  timeout: 5m
 | 
			
		||||
 | 
			
		||||
linters-settings:
 | 
			
		||||
  gci:
 | 
			
		||||
    sections:
 | 
			
		||||
      - standard
 | 
			
		||||
      - default
 | 
			
		||||
      - prefix(github.com/go-viper/mapstructure)
 | 
			
		||||
  golint:
 | 
			
		||||
    min-confidence: 0
 | 
			
		||||
  goimports:
 | 
			
		||||
    local-prefixes: github.com/go-viper/maptstructure
 | 
			
		||||
 | 
			
		||||
linters:
 | 
			
		||||
  disable-all: true
 | 
			
		||||
  enable:
 | 
			
		||||
    - gci
 | 
			
		||||
    - gofmt
 | 
			
		||||
    - gofumpt
 | 
			
		||||
    - goimports
 | 
			
		||||
    - staticcheck
 | 
			
		||||
    # - stylecheck
 | 
			
		||||
							
								
								
									
										104
									
								
								vendor/github.com/go-viper/mapstructure/v2/CHANGELOG.md
									
										
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										104
									
								
								vendor/github.com/go-viper/mapstructure/v2/CHANGELOG.md
									
										
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,104 @@
 | 
			
		|||
> [!WARNING]
 | 
			
		||||
> As of v2 of this library, change log can be found in GitHub releases.
 | 
			
		||||
 | 
			
		||||
## 1.5.1
 | 
			
		||||
 | 
			
		||||
* Wrap errors so they're compatible with `errors.Is` and `errors.As` [GH-282]
 | 
			
		||||
* Fix map of slices not decoding properly in certain cases. [GH-266]
 | 
			
		||||
 | 
			
		||||
## 1.5.0
 | 
			
		||||
 | 
			
		||||
* New option `IgnoreUntaggedFields` to ignore decoding to any fields
 | 
			
		||||
  without `mapstructure` (or the configured tag name) set [GH-277]
 | 
			
		||||
* New option `ErrorUnset` which makes it an error if any fields
 | 
			
		||||
  in a target struct are not set by the decoding process. [GH-225]
 | 
			
		||||
* New function `OrComposeDecodeHookFunc` to help compose decode hooks. [GH-240]
 | 
			
		||||
* Decoding to slice from array no longer crashes [GH-265]
 | 
			
		||||
* Decode nested struct pointers to map [GH-271]
 | 
			
		||||
* Fix issue where `,squash` was ignored if `Squash` option was set. [GH-280]
 | 
			
		||||
* Fix issue where fields with `,omitempty` would sometimes decode
 | 
			
		||||
  into a map with an empty string key [GH-281]
 | 
			
		||||
 | 
			
		||||
## 1.4.3
 | 
			
		||||
 | 
			
		||||
* Fix cases where `json.Number` didn't decode properly [GH-261]
 | 
			
		||||
 | 
			
		||||
## 1.4.2
 | 
			
		||||
 | 
			
		||||
* Custom name matchers to support any sort of casing, formatting, etc. for
 | 
			
		||||
  field names. [GH-250]
 | 
			
		||||
* Fix possible panic in ComposeDecodeHookFunc [GH-251]
 | 
			
		||||
 | 
			
		||||
## 1.4.1
 | 
			
		||||
 | 
			
		||||
* Fix regression where `*time.Time` value would be set to empty and not be sent
 | 
			
		||||
  to decode hooks properly [GH-232]
 | 
			
		||||
 | 
			
		||||
## 1.4.0
 | 
			
		||||
 | 
			
		||||
* A new decode hook type `DecodeHookFuncValue` has been added that has
 | 
			
		||||
  access to the full values. [GH-183]
 | 
			
		||||
* Squash is now supported with embedded fields that are struct pointers [GH-205]
 | 
			
		||||
* Empty strings will convert to 0 for all numeric types when weakly decoding [GH-206]
 | 
			
		||||
 | 
			
		||||
## 1.3.3
 | 
			
		||||
 | 
			
		||||
* Decoding maps from maps creates a settable value for decode hooks [GH-203]
 | 
			
		||||
 | 
			
		||||
## 1.3.2
 | 
			
		||||
 | 
			
		||||
* Decode into interface type with a struct value is supported [GH-187]
 | 
			
		||||
 | 
			
		||||
## 1.3.1
 | 
			
		||||
 | 
			
		||||
* Squash should only squash embedded structs. [GH-194]
 | 
			
		||||
 | 
			
		||||
## 1.3.0
 | 
			
		||||
 | 
			
		||||
* Added `",omitempty"` support. This will ignore zero values in the source
 | 
			
		||||
  structure when encoding. [GH-145]
 | 
			
		||||
 | 
			
		||||
## 1.2.3
 | 
			
		||||
 | 
			
		||||
* Fix duplicate entries in Keys list with pointer values. [GH-185]
 | 
			
		||||
 | 
			
		||||
## 1.2.2
 | 
			
		||||
 | 
			
		||||
* Do not add unsettable (unexported) values to the unused metadata key
 | 
			
		||||
  or "remain" value. [GH-150]
 | 
			
		||||
 | 
			
		||||
## 1.2.1
 | 
			
		||||
 | 
			
		||||
* Go modules checksum mismatch fix
 | 
			
		||||
 | 
			
		||||
## 1.2.0
 | 
			
		||||
 | 
			
		||||
* Added support to capture unused values in a field using the `",remain"` value
 | 
			
		||||
  in the mapstructure tag. There is an example to showcase usage.
 | 
			
		||||
* Added `DecoderConfig` option to always squash embedded structs
 | 
			
		||||
* `json.Number` can decode into `uint` types
 | 
			
		||||
* Empty slices are preserved and not replaced with nil slices
 | 
			
		||||
* Fix panic that can occur in when decoding a map into a nil slice of structs
 | 
			
		||||
* Improved package documentation for godoc
 | 
			
		||||
 | 
			
		||||
## 1.1.2
 | 
			
		||||
 | 
			
		||||
* Fix error when decode hook decodes interface implementation into interface
 | 
			
		||||
  type. [GH-140]
 | 
			
		||||
 | 
			
		||||
## 1.1.1
 | 
			
		||||
 | 
			
		||||
* Fix panic that can happen in `decodePtr`
 | 
			
		||||
 | 
			
		||||
## 1.1.0
 | 
			
		||||
 | 
			
		||||
* Added `StringToIPHookFunc` to convert `string` to `net.IP` and `net.IPNet` [GH-133]
 | 
			
		||||
* Support struct to struct decoding [GH-137]
 | 
			
		||||
* If source map value is nil, then destination map value is nil (instead of empty)
 | 
			
		||||
* If source slice value is nil, then destination slice value is nil (instead of empty)
 | 
			
		||||
* If source pointer is nil, then destination pointer is set to nil (instead of
 | 
			
		||||
  allocated zero value of type)
 | 
			
		||||
 | 
			
		||||
## 1.0.0
 | 
			
		||||
 | 
			
		||||
* Initial tagged stable release.
 | 
			
		||||
							
								
								
									
										21
									
								
								vendor/github.com/go-viper/mapstructure/v2/LICENSE
									
										
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										21
									
								
								vendor/github.com/go-viper/mapstructure/v2/LICENSE
									
										
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,21 @@
 | 
			
		|||
The MIT License (MIT)
 | 
			
		||||
 | 
			
		||||
Copyright (c) 2013 Mitchell Hashimoto
 | 
			
		||||
 | 
			
		||||
Permission is hereby granted, free of charge, to any person obtaining a copy
 | 
			
		||||
of this software and associated documentation files (the "Software"), to deal
 | 
			
		||||
in the Software without restriction, including without limitation the rights
 | 
			
		||||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
 | 
			
		||||
copies of the Software, and to permit persons to whom the Software is
 | 
			
		||||
furnished to do so, subject to the following conditions:
 | 
			
		||||
 | 
			
		||||
The above copyright notice and this permission notice shall be included in
 | 
			
		||||
all copies or substantial portions of the Software.
 | 
			
		||||
 | 
			
		||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
 | 
			
		||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
 | 
			
		||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
 | 
			
		||||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
 | 
			
		||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
 | 
			
		||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
 | 
			
		||||
THE SOFTWARE.
 | 
			
		||||
							
								
								
									
										80
									
								
								vendor/github.com/go-viper/mapstructure/v2/README.md
									
										
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										80
									
								
								vendor/github.com/go-viper/mapstructure/v2/README.md
									
										
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,80 @@
 | 
			
		|||
# mapstructure
 | 
			
		||||
 | 
			
		||||
[](https://github.com/go-viper/mapstructure/actions?query=workflow%3ACI)
 | 
			
		||||
[](https://pkg.go.dev/mod/github.com/go-viper/mapstructure/v2)
 | 
			
		||||

 | 
			
		||||
 | 
			
		||||
mapstructure is a Go library for decoding generic map values to structures
 | 
			
		||||
and vice versa, while providing helpful error handling.
 | 
			
		||||
 | 
			
		||||
This library is most useful when decoding values from some data stream (JSON,
 | 
			
		||||
Gob, etc.) where you don't _quite_ know the structure of the underlying data
 | 
			
		||||
until you read a part of it. You can therefore read a `map[string]interface{}`
 | 
			
		||||
and use this library to decode it into the proper underlying native Go
 | 
			
		||||
structure.
 | 
			
		||||
 | 
			
		||||
## Installation
 | 
			
		||||
 | 
			
		||||
```shell
 | 
			
		||||
go get github.com/go-viper/mapstructure/v2
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
## Migrating from `github.com/mitchellh/mapstructure`
 | 
			
		||||
 | 
			
		||||
[@mitchehllh](https://github.com/mitchellh) announced his intent to archive some of his unmaintained projects (see [here](https://gist.github.com/mitchellh/90029601268e59a29e64e55bab1c5bdc) and [here](https://github.com/mitchellh/mapstructure/issues/349)). This is a repository achieved the "blessed fork" status.
 | 
			
		||||
 | 
			
		||||
You can migrate to this package by changing your import paths in your Go files to `github.com/go-viper/mapstructure/v2`.
 | 
			
		||||
The API is the same, so you don't need to change anything else.
 | 
			
		||||
 | 
			
		||||
Here is a script that can help you with the migration:
 | 
			
		||||
 | 
			
		||||
```shell
 | 
			
		||||
sed -i 's/github.com\/mitchellh\/mapstructure/github.com\/go-viper\/mapstructure\/v2/g' $(find . -type f -name '*.go')
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
If you need more time to migrate your code, that is absolutely fine.
 | 
			
		||||
 | 
			
		||||
Some of the latest fixes are backported to the v1 release branch of this package, so you can use the Go modules `replace` feature until you are ready to migrate:
 | 
			
		||||
 | 
			
		||||
```shell
 | 
			
		||||
replace github.com/mitchellh/mapstructure => github.com/go-viper/mapstructure v1.6.0
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
## Usage & Example
 | 
			
		||||
 | 
			
		||||
For usage and examples see the [documentation](https://pkg.go.dev/mod/github.com/go-viper/mapstructure/v2).
 | 
			
		||||
 | 
			
		||||
The `Decode` function has examples associated with it there.
 | 
			
		||||
 | 
			
		||||
## But Why?!
 | 
			
		||||
 | 
			
		||||
Go offers fantastic standard libraries for decoding formats such as JSON.
 | 
			
		||||
The standard method is to have a struct pre-created, and populate that struct
 | 
			
		||||
from the bytes of the encoded format. This is great, but the problem is if
 | 
			
		||||
you have configuration or an encoding that changes slightly depending on
 | 
			
		||||
specific fields. For example, consider this JSON:
 | 
			
		||||
 | 
			
		||||
```json
 | 
			
		||||
{
 | 
			
		||||
  "type": "person",
 | 
			
		||||
  "name": "Mitchell"
 | 
			
		||||
}
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
Perhaps we can't populate a specific structure without first reading
 | 
			
		||||
the "type" field from the JSON. We could always do two passes over the
 | 
			
		||||
decoding of the JSON (reading the "type" first, and the rest later).
 | 
			
		||||
However, it is much simpler to just decode this into a `map[string]interface{}`
 | 
			
		||||
structure, read the "type" key, then use something like this library
 | 
			
		||||
to decode it into the proper structure.
 | 
			
		||||
 | 
			
		||||
## Credits
 | 
			
		||||
 | 
			
		||||
Mapstructure was originally created by [@mitchellh](https://github.com/mitchellh).
 | 
			
		||||
This is a maintained fork of the original library.
 | 
			
		||||
 | 
			
		||||
Read more about the reasons for the fork [here](https://github.com/mitchellh/mapstructure/issues/349).
 | 
			
		||||
 | 
			
		||||
## License
 | 
			
		||||
 | 
			
		||||
The project is licensed under the [MIT License](LICENSE).
 | 
			
		||||
							
								
								
									
										630
									
								
								vendor/github.com/go-viper/mapstructure/v2/decode_hooks.go
									
										
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										630
									
								
								vendor/github.com/go-viper/mapstructure/v2/decode_hooks.go
									
										
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,630 @@
 | 
			
		|||
package mapstructure
 | 
			
		||||
 | 
			
		||||
import (
 | 
			
		||||
	"encoding"
 | 
			
		||||
	"errors"
 | 
			
		||||
	"fmt"
 | 
			
		||||
	"net"
 | 
			
		||||
	"net/netip"
 | 
			
		||||
	"net/url"
 | 
			
		||||
	"reflect"
 | 
			
		||||
	"strconv"
 | 
			
		||||
	"strings"
 | 
			
		||||
	"time"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// typedDecodeHook takes a raw DecodeHookFunc (an interface{}) and turns
 | 
			
		||||
// it into the proper DecodeHookFunc type, such as DecodeHookFuncType.
 | 
			
		||||
func typedDecodeHook(h DecodeHookFunc) DecodeHookFunc {
 | 
			
		||||
	// Create variables here so we can reference them with the reflect pkg
 | 
			
		||||
	var f1 DecodeHookFuncType
 | 
			
		||||
	var f2 DecodeHookFuncKind
 | 
			
		||||
	var f3 DecodeHookFuncValue
 | 
			
		||||
 | 
			
		||||
	// Fill in the variables into this interface and the rest is done
 | 
			
		||||
	// automatically using the reflect package.
 | 
			
		||||
	potential := []interface{}{f1, f2, f3}
 | 
			
		||||
 | 
			
		||||
	v := reflect.ValueOf(h)
 | 
			
		||||
	vt := v.Type()
 | 
			
		||||
	for _, raw := range potential {
 | 
			
		||||
		pt := reflect.ValueOf(raw).Type()
 | 
			
		||||
		if vt.ConvertibleTo(pt) {
 | 
			
		||||
			return v.Convert(pt).Interface()
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	return nil
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// cachedDecodeHook takes a raw DecodeHookFunc (an interface{}) and turns
 | 
			
		||||
// it into a closure to be used directly
 | 
			
		||||
// if the type fails to convert we return a closure always erroring to keep the previous behaviour
 | 
			
		||||
func cachedDecodeHook(raw DecodeHookFunc) func(from reflect.Value, to reflect.Value) (interface{}, error) {
 | 
			
		||||
	switch f := typedDecodeHook(raw).(type) {
 | 
			
		||||
	case DecodeHookFuncType:
 | 
			
		||||
		return func(from reflect.Value, to reflect.Value) (interface{}, error) {
 | 
			
		||||
			return f(from.Type(), to.Type(), from.Interface())
 | 
			
		||||
		}
 | 
			
		||||
	case DecodeHookFuncKind:
 | 
			
		||||
		return func(from reflect.Value, to reflect.Value) (interface{}, error) {
 | 
			
		||||
			return f(from.Kind(), to.Kind(), from.Interface())
 | 
			
		||||
		}
 | 
			
		||||
	case DecodeHookFuncValue:
 | 
			
		||||
		return func(from reflect.Value, to reflect.Value) (interface{}, error) {
 | 
			
		||||
			return f(from, to)
 | 
			
		||||
		}
 | 
			
		||||
	default:
 | 
			
		||||
		return func(from reflect.Value, to reflect.Value) (interface{}, error) {
 | 
			
		||||
			return nil, errors.New("invalid decode hook signature")
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// DecodeHookExec executes the given decode hook. This should be used
 | 
			
		||||
// since it'll naturally degrade to the older backwards compatible DecodeHookFunc
 | 
			
		||||
// that took reflect.Kind instead of reflect.Type.
 | 
			
		||||
func DecodeHookExec(
 | 
			
		||||
	raw DecodeHookFunc,
 | 
			
		||||
	from reflect.Value, to reflect.Value,
 | 
			
		||||
) (interface{}, error) {
 | 
			
		||||
	switch f := typedDecodeHook(raw).(type) {
 | 
			
		||||
	case DecodeHookFuncType:
 | 
			
		||||
		return f(from.Type(), to.Type(), from.Interface())
 | 
			
		||||
	case DecodeHookFuncKind:
 | 
			
		||||
		return f(from.Kind(), to.Kind(), from.Interface())
 | 
			
		||||
	case DecodeHookFuncValue:
 | 
			
		||||
		return f(from, to)
 | 
			
		||||
	default:
 | 
			
		||||
		return nil, errors.New("invalid decode hook signature")
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// ComposeDecodeHookFunc creates a single DecodeHookFunc that
 | 
			
		||||
// automatically composes multiple DecodeHookFuncs.
 | 
			
		||||
//
 | 
			
		||||
// The composed funcs are called in order, with the result of the
 | 
			
		||||
// previous transformation.
 | 
			
		||||
func ComposeDecodeHookFunc(fs ...DecodeHookFunc) DecodeHookFunc {
 | 
			
		||||
	cached := make([]func(from reflect.Value, to reflect.Value) (interface{}, error), 0, len(fs))
 | 
			
		||||
	for _, f := range fs {
 | 
			
		||||
		cached = append(cached, cachedDecodeHook(f))
 | 
			
		||||
	}
 | 
			
		||||
	return func(f reflect.Value, t reflect.Value) (interface{}, error) {
 | 
			
		||||
		var err error
 | 
			
		||||
		data := f.Interface()
 | 
			
		||||
 | 
			
		||||
		newFrom := f
 | 
			
		||||
		for _, c := range cached {
 | 
			
		||||
			data, err = c(newFrom, t)
 | 
			
		||||
			if err != nil {
 | 
			
		||||
				return nil, err
 | 
			
		||||
			}
 | 
			
		||||
			newFrom = reflect.ValueOf(data)
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		return data, nil
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// OrComposeDecodeHookFunc executes all input hook functions until one of them returns no error. In that case its value is returned.
 | 
			
		||||
// If all hooks return an error, OrComposeDecodeHookFunc returns an error concatenating all error messages.
 | 
			
		||||
func OrComposeDecodeHookFunc(ff ...DecodeHookFunc) DecodeHookFunc {
 | 
			
		||||
	cached := make([]func(from reflect.Value, to reflect.Value) (interface{}, error), 0, len(ff))
 | 
			
		||||
	for _, f := range ff {
 | 
			
		||||
		cached = append(cached, cachedDecodeHook(f))
 | 
			
		||||
	}
 | 
			
		||||
	return func(a, b reflect.Value) (interface{}, error) {
 | 
			
		||||
		var allErrs string
 | 
			
		||||
		var out interface{}
 | 
			
		||||
		var err error
 | 
			
		||||
 | 
			
		||||
		for _, c := range cached {
 | 
			
		||||
			out, err = c(a, b)
 | 
			
		||||
			if err != nil {
 | 
			
		||||
				allErrs += err.Error() + "\n"
 | 
			
		||||
				continue
 | 
			
		||||
			}
 | 
			
		||||
 | 
			
		||||
			return out, nil
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		return nil, errors.New(allErrs)
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// StringToSliceHookFunc returns a DecodeHookFunc that converts
 | 
			
		||||
// string to []string by splitting on the given sep.
 | 
			
		||||
func StringToSliceHookFunc(sep string) DecodeHookFunc {
 | 
			
		||||
	return func(
 | 
			
		||||
		f reflect.Type,
 | 
			
		||||
		t reflect.Type,
 | 
			
		||||
		data interface{},
 | 
			
		||||
	) (interface{}, error) {
 | 
			
		||||
		if f.Kind() != reflect.String {
 | 
			
		||||
			return data, nil
 | 
			
		||||
		}
 | 
			
		||||
		if t != reflect.SliceOf(f) {
 | 
			
		||||
			return data, nil
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		raw := data.(string)
 | 
			
		||||
		if raw == "" {
 | 
			
		||||
			return []string{}, nil
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		return strings.Split(raw, sep), nil
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// StringToTimeDurationHookFunc returns a DecodeHookFunc that converts
 | 
			
		||||
// strings to time.Duration.
 | 
			
		||||
func StringToTimeDurationHookFunc() DecodeHookFunc {
 | 
			
		||||
	return func(
 | 
			
		||||
		f reflect.Type,
 | 
			
		||||
		t reflect.Type,
 | 
			
		||||
		data interface{},
 | 
			
		||||
	) (interface{}, error) {
 | 
			
		||||
		if f.Kind() != reflect.String {
 | 
			
		||||
			return data, nil
 | 
			
		||||
		}
 | 
			
		||||
		if t != reflect.TypeOf(time.Duration(5)) {
 | 
			
		||||
			return data, nil
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		// Convert it by parsing
 | 
			
		||||
		return time.ParseDuration(data.(string))
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// StringToURLHookFunc returns a DecodeHookFunc that converts
 | 
			
		||||
// strings to *url.URL.
 | 
			
		||||
func StringToURLHookFunc() DecodeHookFunc {
 | 
			
		||||
	return func(
 | 
			
		||||
		f reflect.Type,
 | 
			
		||||
		t reflect.Type,
 | 
			
		||||
		data interface{},
 | 
			
		||||
	) (interface{}, error) {
 | 
			
		||||
		if f.Kind() != reflect.String {
 | 
			
		||||
			return data, nil
 | 
			
		||||
		}
 | 
			
		||||
		if t != reflect.TypeOf(&url.URL{}) {
 | 
			
		||||
			return data, nil
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		// Convert it by parsing
 | 
			
		||||
		return url.Parse(data.(string))
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// StringToIPHookFunc returns a DecodeHookFunc that converts
 | 
			
		||||
// strings to net.IP
 | 
			
		||||
func StringToIPHookFunc() DecodeHookFunc {
 | 
			
		||||
	return func(
 | 
			
		||||
		f reflect.Type,
 | 
			
		||||
		t reflect.Type,
 | 
			
		||||
		data interface{},
 | 
			
		||||
	) (interface{}, error) {
 | 
			
		||||
		if f.Kind() != reflect.String {
 | 
			
		||||
			return data, nil
 | 
			
		||||
		}
 | 
			
		||||
		if t != reflect.TypeOf(net.IP{}) {
 | 
			
		||||
			return data, nil
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		// Convert it by parsing
 | 
			
		||||
		ip := net.ParseIP(data.(string))
 | 
			
		||||
		if ip == nil {
 | 
			
		||||
			return net.IP{}, fmt.Errorf("failed parsing ip %v", data)
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		return ip, nil
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// StringToIPNetHookFunc returns a DecodeHookFunc that converts
 | 
			
		||||
// strings to net.IPNet
 | 
			
		||||
func StringToIPNetHookFunc() DecodeHookFunc {
 | 
			
		||||
	return func(
 | 
			
		||||
		f reflect.Type,
 | 
			
		||||
		t reflect.Type,
 | 
			
		||||
		data interface{},
 | 
			
		||||
	) (interface{}, error) {
 | 
			
		||||
		if f.Kind() != reflect.String {
 | 
			
		||||
			return data, nil
 | 
			
		||||
		}
 | 
			
		||||
		if t != reflect.TypeOf(net.IPNet{}) {
 | 
			
		||||
			return data, nil
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		// Convert it by parsing
 | 
			
		||||
		_, net, err := net.ParseCIDR(data.(string))
 | 
			
		||||
		return net, err
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// StringToTimeHookFunc returns a DecodeHookFunc that converts
 | 
			
		||||
// strings to time.Time.
 | 
			
		||||
func StringToTimeHookFunc(layout string) DecodeHookFunc {
 | 
			
		||||
	return func(
 | 
			
		||||
		f reflect.Type,
 | 
			
		||||
		t reflect.Type,
 | 
			
		||||
		data interface{},
 | 
			
		||||
	) (interface{}, error) {
 | 
			
		||||
		if f.Kind() != reflect.String {
 | 
			
		||||
			return data, nil
 | 
			
		||||
		}
 | 
			
		||||
		if t != reflect.TypeOf(time.Time{}) {
 | 
			
		||||
			return data, nil
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		// Convert it by parsing
 | 
			
		||||
		return time.Parse(layout, data.(string))
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// WeaklyTypedHook is a DecodeHookFunc which adds support for weak typing to
 | 
			
		||||
// the decoder.
 | 
			
		||||
//
 | 
			
		||||
// Note that this is significantly different from the WeaklyTypedInput option
 | 
			
		||||
// of the DecoderConfig.
 | 
			
		||||
func WeaklyTypedHook(
 | 
			
		||||
	f reflect.Kind,
 | 
			
		||||
	t reflect.Kind,
 | 
			
		||||
	data interface{},
 | 
			
		||||
) (interface{}, error) {
 | 
			
		||||
	dataVal := reflect.ValueOf(data)
 | 
			
		||||
	switch t {
 | 
			
		||||
	case reflect.String:
 | 
			
		||||
		switch f {
 | 
			
		||||
		case reflect.Bool:
 | 
			
		||||
			if dataVal.Bool() {
 | 
			
		||||
				return "1", nil
 | 
			
		||||
			}
 | 
			
		||||
			return "0", nil
 | 
			
		||||
		case reflect.Float32:
 | 
			
		||||
			return strconv.FormatFloat(dataVal.Float(), 'f', -1, 64), nil
 | 
			
		||||
		case reflect.Int:
 | 
			
		||||
			return strconv.FormatInt(dataVal.Int(), 10), nil
 | 
			
		||||
		case reflect.Slice:
 | 
			
		||||
			dataType := dataVal.Type()
 | 
			
		||||
			elemKind := dataType.Elem().Kind()
 | 
			
		||||
			if elemKind == reflect.Uint8 {
 | 
			
		||||
				return string(dataVal.Interface().([]uint8)), nil
 | 
			
		||||
			}
 | 
			
		||||
		case reflect.Uint:
 | 
			
		||||
			return strconv.FormatUint(dataVal.Uint(), 10), nil
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	return data, nil
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func RecursiveStructToMapHookFunc() DecodeHookFunc {
 | 
			
		||||
	return func(f reflect.Value, t reflect.Value) (interface{}, error) {
 | 
			
		||||
		if f.Kind() != reflect.Struct {
 | 
			
		||||
			return f.Interface(), nil
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		var i interface{} = struct{}{}
 | 
			
		||||
		if t.Type() != reflect.TypeOf(&i).Elem() {
 | 
			
		||||
			return f.Interface(), nil
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		m := make(map[string]interface{})
 | 
			
		||||
		t.Set(reflect.ValueOf(m))
 | 
			
		||||
 | 
			
		||||
		return f.Interface(), nil
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// TextUnmarshallerHookFunc returns a DecodeHookFunc that applies
 | 
			
		||||
// strings to the UnmarshalText function, when the target type
 | 
			
		||||
// implements the encoding.TextUnmarshaler interface
 | 
			
		||||
func TextUnmarshallerHookFunc() DecodeHookFuncType {
 | 
			
		||||
	return func(
 | 
			
		||||
		f reflect.Type,
 | 
			
		||||
		t reflect.Type,
 | 
			
		||||
		data interface{},
 | 
			
		||||
	) (interface{}, error) {
 | 
			
		||||
		if f.Kind() != reflect.String {
 | 
			
		||||
			return data, nil
 | 
			
		||||
		}
 | 
			
		||||
		result := reflect.New(t).Interface()
 | 
			
		||||
		unmarshaller, ok := result.(encoding.TextUnmarshaler)
 | 
			
		||||
		if !ok {
 | 
			
		||||
			return data, nil
 | 
			
		||||
		}
 | 
			
		||||
		str, ok := data.(string)
 | 
			
		||||
		if !ok {
 | 
			
		||||
			str = reflect.Indirect(reflect.ValueOf(&data)).Elem().String()
 | 
			
		||||
		}
 | 
			
		||||
		if err := unmarshaller.UnmarshalText([]byte(str)); err != nil {
 | 
			
		||||
			return nil, err
 | 
			
		||||
		}
 | 
			
		||||
		return result, nil
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// StringToNetIPAddrHookFunc returns a DecodeHookFunc that converts
 | 
			
		||||
// strings to netip.Addr.
 | 
			
		||||
func StringToNetIPAddrHookFunc() DecodeHookFunc {
 | 
			
		||||
	return func(
 | 
			
		||||
		f reflect.Type,
 | 
			
		||||
		t reflect.Type,
 | 
			
		||||
		data interface{},
 | 
			
		||||
	) (interface{}, error) {
 | 
			
		||||
		if f.Kind() != reflect.String {
 | 
			
		||||
			return data, nil
 | 
			
		||||
		}
 | 
			
		||||
		if t != reflect.TypeOf(netip.Addr{}) {
 | 
			
		||||
			return data, nil
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		// Convert it by parsing
 | 
			
		||||
		return netip.ParseAddr(data.(string))
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// StringToNetIPAddrPortHookFunc returns a DecodeHookFunc that converts
 | 
			
		||||
// strings to netip.AddrPort.
 | 
			
		||||
func StringToNetIPAddrPortHookFunc() DecodeHookFunc {
 | 
			
		||||
	return func(
 | 
			
		||||
		f reflect.Type,
 | 
			
		||||
		t reflect.Type,
 | 
			
		||||
		data interface{},
 | 
			
		||||
	) (interface{}, error) {
 | 
			
		||||
		if f.Kind() != reflect.String {
 | 
			
		||||
			return data, nil
 | 
			
		||||
		}
 | 
			
		||||
		if t != reflect.TypeOf(netip.AddrPort{}) {
 | 
			
		||||
			return data, nil
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		// Convert it by parsing
 | 
			
		||||
		return netip.ParseAddrPort(data.(string))
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// StringToBasicTypeHookFunc returns a DecodeHookFunc that converts
 | 
			
		||||
// strings to basic types.
 | 
			
		||||
// int8, uint8, int16, uint16, int32, uint32, int64, uint64, int, uint, float32, float64, bool, byte, rune, complex64, complex128
 | 
			
		||||
func StringToBasicTypeHookFunc() DecodeHookFunc {
 | 
			
		||||
	return ComposeDecodeHookFunc(
 | 
			
		||||
		StringToInt8HookFunc(),
 | 
			
		||||
		StringToUint8HookFunc(),
 | 
			
		||||
		StringToInt16HookFunc(),
 | 
			
		||||
		StringToUint16HookFunc(),
 | 
			
		||||
		StringToInt32HookFunc(),
 | 
			
		||||
		StringToUint32HookFunc(),
 | 
			
		||||
		StringToInt64HookFunc(),
 | 
			
		||||
		StringToUint64HookFunc(),
 | 
			
		||||
		StringToIntHookFunc(),
 | 
			
		||||
		StringToUintHookFunc(),
 | 
			
		||||
		StringToFloat32HookFunc(),
 | 
			
		||||
		StringToFloat64HookFunc(),
 | 
			
		||||
		StringToBoolHookFunc(),
 | 
			
		||||
		// byte and rune are aliases for uint8 and int32 respectively
 | 
			
		||||
		// StringToByteHookFunc(),
 | 
			
		||||
		// StringToRuneHookFunc(),
 | 
			
		||||
		StringToComplex64HookFunc(),
 | 
			
		||||
		StringToComplex128HookFunc(),
 | 
			
		||||
	)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// StringToInt8HookFunc returns a DecodeHookFunc that converts
 | 
			
		||||
// strings to int8.
 | 
			
		||||
func StringToInt8HookFunc() DecodeHookFunc {
 | 
			
		||||
	return func(f reflect.Type, t reflect.Type, data interface{}) (interface{}, error) {
 | 
			
		||||
		if f.Kind() != reflect.String || t.Kind() != reflect.Int8 {
 | 
			
		||||
			return data, nil
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		// Convert it by parsing
 | 
			
		||||
		i64, err := strconv.ParseInt(data.(string), 0, 8)
 | 
			
		||||
		return int8(i64), err
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// StringToUint8HookFunc returns a DecodeHookFunc that converts
 | 
			
		||||
// strings to uint8.
 | 
			
		||||
func StringToUint8HookFunc() DecodeHookFunc {
 | 
			
		||||
	return func(f reflect.Type, t reflect.Type, data interface{}) (interface{}, error) {
 | 
			
		||||
		if f.Kind() != reflect.String || t.Kind() != reflect.Uint8 {
 | 
			
		||||
			return data, nil
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		// Convert it by parsing
 | 
			
		||||
		u64, err := strconv.ParseUint(data.(string), 0, 8)
 | 
			
		||||
		return uint8(u64), err
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// StringToInt16HookFunc returns a DecodeHookFunc that converts
 | 
			
		||||
// strings to int16.
 | 
			
		||||
func StringToInt16HookFunc() DecodeHookFunc {
 | 
			
		||||
	return func(f reflect.Type, t reflect.Type, data interface{}) (interface{}, error) {
 | 
			
		||||
		if f.Kind() != reflect.String || t.Kind() != reflect.Int16 {
 | 
			
		||||
			return data, nil
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		// Convert it by parsing
 | 
			
		||||
		i64, err := strconv.ParseInt(data.(string), 0, 16)
 | 
			
		||||
		return int16(i64), err
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// StringToUint16HookFunc returns a DecodeHookFunc that converts
 | 
			
		||||
// strings to uint16.
 | 
			
		||||
func StringToUint16HookFunc() DecodeHookFunc {
 | 
			
		||||
	return func(f reflect.Type, t reflect.Type, data interface{}) (interface{}, error) {
 | 
			
		||||
		if f.Kind() != reflect.String || t.Kind() != reflect.Uint16 {
 | 
			
		||||
			return data, nil
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		// Convert it by parsing
 | 
			
		||||
		u64, err := strconv.ParseUint(data.(string), 0, 16)
 | 
			
		||||
		return uint16(u64), err
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// StringToInt32HookFunc returns a DecodeHookFunc that converts
 | 
			
		||||
// strings to int32.
 | 
			
		||||
func StringToInt32HookFunc() DecodeHookFunc {
 | 
			
		||||
	return func(f reflect.Type, t reflect.Type, data interface{}) (interface{}, error) {
 | 
			
		||||
		if f.Kind() != reflect.String || t.Kind() != reflect.Int32 {
 | 
			
		||||
			return data, nil
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		// Convert it by parsing
 | 
			
		||||
		i64, err := strconv.ParseInt(data.(string), 0, 32)
 | 
			
		||||
		return int32(i64), err
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// StringToUint32HookFunc returns a DecodeHookFunc that converts
 | 
			
		||||
// strings to uint32.
 | 
			
		||||
func StringToUint32HookFunc() DecodeHookFunc {
 | 
			
		||||
	return func(f reflect.Type, t reflect.Type, data interface{}) (interface{}, error) {
 | 
			
		||||
		if f.Kind() != reflect.String || t.Kind() != reflect.Uint32 {
 | 
			
		||||
			return data, nil
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		// Convert it by parsing
 | 
			
		||||
		u64, err := strconv.ParseUint(data.(string), 0, 32)
 | 
			
		||||
		return uint32(u64), err
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// StringToInt64HookFunc returns a DecodeHookFunc that converts
 | 
			
		||||
// strings to int64.
 | 
			
		||||
func StringToInt64HookFunc() DecodeHookFunc {
 | 
			
		||||
	return func(f reflect.Type, t reflect.Type, data interface{}) (interface{}, error) {
 | 
			
		||||
		if f.Kind() != reflect.String || t.Kind() != reflect.Int64 {
 | 
			
		||||
			return data, nil
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		// Convert it by parsing
 | 
			
		||||
		return strconv.ParseInt(data.(string), 0, 64)
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// StringToUint64HookFunc returns a DecodeHookFunc that converts
 | 
			
		||||
// strings to uint64.
 | 
			
		||||
func StringToUint64HookFunc() DecodeHookFunc {
 | 
			
		||||
	return func(f reflect.Type, t reflect.Type, data interface{}) (interface{}, error) {
 | 
			
		||||
		if f.Kind() != reflect.String || t.Kind() != reflect.Uint64 {
 | 
			
		||||
			return data, nil
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		// Convert it by parsing
 | 
			
		||||
		return strconv.ParseUint(data.(string), 0, 64)
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// StringToIntHookFunc returns a DecodeHookFunc that converts
 | 
			
		||||
// strings to int.
 | 
			
		||||
func StringToIntHookFunc() DecodeHookFunc {
 | 
			
		||||
	return func(f reflect.Type, t reflect.Type, data interface{}) (interface{}, error) {
 | 
			
		||||
		if f.Kind() != reflect.String || t.Kind() != reflect.Int {
 | 
			
		||||
			return data, nil
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		// Convert it by parsing
 | 
			
		||||
		i64, err := strconv.ParseInt(data.(string), 0, 0)
 | 
			
		||||
		return int(i64), err
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// StringToUintHookFunc returns a DecodeHookFunc that converts
 | 
			
		||||
// strings to uint.
 | 
			
		||||
func StringToUintHookFunc() DecodeHookFunc {
 | 
			
		||||
	return func(f reflect.Type, t reflect.Type, data interface{}) (interface{}, error) {
 | 
			
		||||
		if f.Kind() != reflect.String || t.Kind() != reflect.Uint {
 | 
			
		||||
			return data, nil
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		// Convert it by parsing
 | 
			
		||||
		u64, err := strconv.ParseUint(data.(string), 0, 0)
 | 
			
		||||
		return uint(u64), err
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// StringToFloat32HookFunc returns a DecodeHookFunc that converts
 | 
			
		||||
// strings to float32.
 | 
			
		||||
func StringToFloat32HookFunc() DecodeHookFunc {
 | 
			
		||||
	return func(f reflect.Type, t reflect.Type, data interface{}) (interface{}, error) {
 | 
			
		||||
		if f.Kind() != reflect.String || t.Kind() != reflect.Float32 {
 | 
			
		||||
			return data, nil
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		// Convert it by parsing
 | 
			
		||||
		f64, err := strconv.ParseFloat(data.(string), 32)
 | 
			
		||||
		return float32(f64), err
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// StringToFloat64HookFunc returns a DecodeHookFunc that converts
 | 
			
		||||
// strings to float64.
 | 
			
		||||
func StringToFloat64HookFunc() DecodeHookFunc {
 | 
			
		||||
	return func(f reflect.Type, t reflect.Type, data interface{}) (interface{}, error) {
 | 
			
		||||
		if f.Kind() != reflect.String || t.Kind() != reflect.Float64 {
 | 
			
		||||
			return data, nil
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		// Convert it by parsing
 | 
			
		||||
		return strconv.ParseFloat(data.(string), 64)
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// StringToBoolHookFunc returns a DecodeHookFunc that converts
 | 
			
		||||
// strings to bool.
 | 
			
		||||
func StringToBoolHookFunc() DecodeHookFunc {
 | 
			
		||||
	return func(f reflect.Type, t reflect.Type, data interface{}) (interface{}, error) {
 | 
			
		||||
		if f.Kind() != reflect.String || t.Kind() != reflect.Bool {
 | 
			
		||||
			return data, nil
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		// Convert it by parsing
 | 
			
		||||
		return strconv.ParseBool(data.(string))
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// StringToByteHookFunc returns a DecodeHookFunc that converts
 | 
			
		||||
// strings to byte.
 | 
			
		||||
func StringToByteHookFunc() DecodeHookFunc {
 | 
			
		||||
	return StringToUint8HookFunc()
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// StringToRuneHookFunc returns a DecodeHookFunc that converts
 | 
			
		||||
// strings to rune.
 | 
			
		||||
func StringToRuneHookFunc() DecodeHookFunc {
 | 
			
		||||
	return StringToInt32HookFunc()
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// StringToComplex64HookFunc returns a DecodeHookFunc that converts
 | 
			
		||||
// strings to complex64.
 | 
			
		||||
func StringToComplex64HookFunc() DecodeHookFunc {
 | 
			
		||||
	return func(f reflect.Type, t reflect.Type, data interface{}) (interface{}, error) {
 | 
			
		||||
		if f.Kind() != reflect.String || t.Kind() != reflect.Complex64 {
 | 
			
		||||
			return data, nil
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		// Convert it by parsing
 | 
			
		||||
		c128, err := strconv.ParseComplex(data.(string), 64)
 | 
			
		||||
		return complex64(c128), err
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// StringToComplex128HookFunc returns a DecodeHookFunc that converts
 | 
			
		||||
// strings to complex128.
 | 
			
		||||
func StringToComplex128HookFunc() DecodeHookFunc {
 | 
			
		||||
	return func(f reflect.Type, t reflect.Type, data interface{}) (interface{}, error) {
 | 
			
		||||
		if f.Kind() != reflect.String || t.Kind() != reflect.Complex128 {
 | 
			
		||||
			return data, nil
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		// Convert it by parsing
 | 
			
		||||
		return strconv.ParseComplex(data.(string), 128)
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										472
									
								
								vendor/github.com/go-viper/mapstructure/v2/flake.lock
									
										
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										472
									
								
								vendor/github.com/go-viper/mapstructure/v2/flake.lock
									
										
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,472 @@
 | 
			
		|||
{
 | 
			
		||||
  "nodes": {
 | 
			
		||||
    "cachix": {
 | 
			
		||||
      "inputs": {
 | 
			
		||||
        "devenv": "devenv_2",
 | 
			
		||||
        "flake-compat": [
 | 
			
		||||
          "devenv",
 | 
			
		||||
          "flake-compat"
 | 
			
		||||
        ],
 | 
			
		||||
        "nixpkgs": [
 | 
			
		||||
          "devenv",
 | 
			
		||||
          "nixpkgs"
 | 
			
		||||
        ],
 | 
			
		||||
        "pre-commit-hooks": [
 | 
			
		||||
          "devenv",
 | 
			
		||||
          "pre-commit-hooks"
 | 
			
		||||
        ]
 | 
			
		||||
      },
 | 
			
		||||
      "locked": {
 | 
			
		||||
        "lastModified": 1712055811,
 | 
			
		||||
        "narHash": "sha256-7FcfMm5A/f02yyzuavJe06zLa9hcMHsagE28ADcmQvk=",
 | 
			
		||||
        "owner": "cachix",
 | 
			
		||||
        "repo": "cachix",
 | 
			
		||||
        "rev": "02e38da89851ec7fec3356a5c04bc8349cae0e30",
 | 
			
		||||
        "type": "github"
 | 
			
		||||
      },
 | 
			
		||||
      "original": {
 | 
			
		||||
        "owner": "cachix",
 | 
			
		||||
        "repo": "cachix",
 | 
			
		||||
        "type": "github"
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    "devenv": {
 | 
			
		||||
      "inputs": {
 | 
			
		||||
        "cachix": "cachix",
 | 
			
		||||
        "flake-compat": "flake-compat_2",
 | 
			
		||||
        "nix": "nix_2",
 | 
			
		||||
        "nixpkgs": "nixpkgs_2",
 | 
			
		||||
        "pre-commit-hooks": "pre-commit-hooks"
 | 
			
		||||
      },
 | 
			
		||||
      "locked": {
 | 
			
		||||
        "lastModified": 1717245169,
 | 
			
		||||
        "narHash": "sha256-+mW3rTBjGU8p1THJN0lX/Dd/8FbnF+3dB+mJuSaxewE=",
 | 
			
		||||
        "owner": "cachix",
 | 
			
		||||
        "repo": "devenv",
 | 
			
		||||
        "rev": "c3f9f053c077c6f88a3de5276d9178c62baa3fc3",
 | 
			
		||||
        "type": "github"
 | 
			
		||||
      },
 | 
			
		||||
      "original": {
 | 
			
		||||
        "owner": "cachix",
 | 
			
		||||
        "repo": "devenv",
 | 
			
		||||
        "type": "github"
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    "devenv_2": {
 | 
			
		||||
      "inputs": {
 | 
			
		||||
        "flake-compat": [
 | 
			
		||||
          "devenv",
 | 
			
		||||
          "cachix",
 | 
			
		||||
          "flake-compat"
 | 
			
		||||
        ],
 | 
			
		||||
        "nix": "nix",
 | 
			
		||||
        "nixpkgs": "nixpkgs",
 | 
			
		||||
        "poetry2nix": "poetry2nix",
 | 
			
		||||
        "pre-commit-hooks": [
 | 
			
		||||
          "devenv",
 | 
			
		||||
          "cachix",
 | 
			
		||||
          "pre-commit-hooks"
 | 
			
		||||
        ]
 | 
			
		||||
      },
 | 
			
		||||
      "locked": {
 | 
			
		||||
        "lastModified": 1708704632,
 | 
			
		||||
        "narHash": "sha256-w+dOIW60FKMaHI1q5714CSibk99JfYxm0CzTinYWr+Q=",
 | 
			
		||||
        "owner": "cachix",
 | 
			
		||||
        "repo": "devenv",
 | 
			
		||||
        "rev": "2ee4450b0f4b95a1b90f2eb5ffea98b90e48c196",
 | 
			
		||||
        "type": "github"
 | 
			
		||||
      },
 | 
			
		||||
      "original": {
 | 
			
		||||
        "owner": "cachix",
 | 
			
		||||
        "ref": "python-rewrite",
 | 
			
		||||
        "repo": "devenv",
 | 
			
		||||
        "type": "github"
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    "flake-compat": {
 | 
			
		||||
      "flake": false,
 | 
			
		||||
      "locked": {
 | 
			
		||||
        "lastModified": 1673956053,
 | 
			
		||||
        "narHash": "sha256-4gtG9iQuiKITOjNQQeQIpoIB6b16fm+504Ch3sNKLd8=",
 | 
			
		||||
        "owner": "edolstra",
 | 
			
		||||
        "repo": "flake-compat",
 | 
			
		||||
        "rev": "35bb57c0c8d8b62bbfd284272c928ceb64ddbde9",
 | 
			
		||||
        "type": "github"
 | 
			
		||||
      },
 | 
			
		||||
      "original": {
 | 
			
		||||
        "owner": "edolstra",
 | 
			
		||||
        "repo": "flake-compat",
 | 
			
		||||
        "type": "github"
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    "flake-compat_2": {
 | 
			
		||||
      "flake": false,
 | 
			
		||||
      "locked": {
 | 
			
		||||
        "lastModified": 1696426674,
 | 
			
		||||
        "narHash": "sha256-kvjfFW7WAETZlt09AgDn1MrtKzP7t90Vf7vypd3OL1U=",
 | 
			
		||||
        "owner": "edolstra",
 | 
			
		||||
        "repo": "flake-compat",
 | 
			
		||||
        "rev": "0f9255e01c2351cc7d116c072cb317785dd33b33",
 | 
			
		||||
        "type": "github"
 | 
			
		||||
      },
 | 
			
		||||
      "original": {
 | 
			
		||||
        "owner": "edolstra",
 | 
			
		||||
        "repo": "flake-compat",
 | 
			
		||||
        "type": "github"
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    "flake-parts": {
 | 
			
		||||
      "inputs": {
 | 
			
		||||
        "nixpkgs-lib": "nixpkgs-lib"
 | 
			
		||||
      },
 | 
			
		||||
      "locked": {
 | 
			
		||||
        "lastModified": 1717285511,
 | 
			
		||||
        "narHash": "sha256-iKzJcpdXih14qYVcZ9QC9XuZYnPc6T8YImb6dX166kw=",
 | 
			
		||||
        "owner": "hercules-ci",
 | 
			
		||||
        "repo": "flake-parts",
 | 
			
		||||
        "rev": "2a55567fcf15b1b1c7ed712a2c6fadaec7412ea8",
 | 
			
		||||
        "type": "github"
 | 
			
		||||
      },
 | 
			
		||||
      "original": {
 | 
			
		||||
        "owner": "hercules-ci",
 | 
			
		||||
        "repo": "flake-parts",
 | 
			
		||||
        "type": "github"
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    "flake-utils": {
 | 
			
		||||
      "inputs": {
 | 
			
		||||
        "systems": "systems"
 | 
			
		||||
      },
 | 
			
		||||
      "locked": {
 | 
			
		||||
        "lastModified": 1689068808,
 | 
			
		||||
        "narHash": "sha256-6ixXo3wt24N/melDWjq70UuHQLxGV8jZvooRanIHXw0=",
 | 
			
		||||
        "owner": "numtide",
 | 
			
		||||
        "repo": "flake-utils",
 | 
			
		||||
        "rev": "919d646de7be200f3bf08cb76ae1f09402b6f9b4",
 | 
			
		||||
        "type": "github"
 | 
			
		||||
      },
 | 
			
		||||
      "original": {
 | 
			
		||||
        "owner": "numtide",
 | 
			
		||||
        "repo": "flake-utils",
 | 
			
		||||
        "type": "github"
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    "flake-utils_2": {
 | 
			
		||||
      "inputs": {
 | 
			
		||||
        "systems": "systems_2"
 | 
			
		||||
      },
 | 
			
		||||
      "locked": {
 | 
			
		||||
        "lastModified": 1710146030,
 | 
			
		||||
        "narHash": "sha256-SZ5L6eA7HJ/nmkzGG7/ISclqe6oZdOZTNoesiInkXPQ=",
 | 
			
		||||
        "owner": "numtide",
 | 
			
		||||
        "repo": "flake-utils",
 | 
			
		||||
        "rev": "b1d9ab70662946ef0850d488da1c9019f3a9752a",
 | 
			
		||||
        "type": "github"
 | 
			
		||||
      },
 | 
			
		||||
      "original": {
 | 
			
		||||
        "owner": "numtide",
 | 
			
		||||
        "repo": "flake-utils",
 | 
			
		||||
        "type": "github"
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    "gitignore": {
 | 
			
		||||
      "inputs": {
 | 
			
		||||
        "nixpkgs": [
 | 
			
		||||
          "devenv",
 | 
			
		||||
          "pre-commit-hooks",
 | 
			
		||||
          "nixpkgs"
 | 
			
		||||
        ]
 | 
			
		||||
      },
 | 
			
		||||
      "locked": {
 | 
			
		||||
        "lastModified": 1709087332,
 | 
			
		||||
        "narHash": "sha256-HG2cCnktfHsKV0s4XW83gU3F57gaTljL9KNSuG6bnQs=",
 | 
			
		||||
        "owner": "hercules-ci",
 | 
			
		||||
        "repo": "gitignore.nix",
 | 
			
		||||
        "rev": "637db329424fd7e46cf4185293b9cc8c88c95394",
 | 
			
		||||
        "type": "github"
 | 
			
		||||
      },
 | 
			
		||||
      "original": {
 | 
			
		||||
        "owner": "hercules-ci",
 | 
			
		||||
        "repo": "gitignore.nix",
 | 
			
		||||
        "type": "github"
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    "nix": {
 | 
			
		||||
      "inputs": {
 | 
			
		||||
        "flake-compat": "flake-compat",
 | 
			
		||||
        "nixpkgs": [
 | 
			
		||||
          "devenv",
 | 
			
		||||
          "cachix",
 | 
			
		||||
          "devenv",
 | 
			
		||||
          "nixpkgs"
 | 
			
		||||
        ],
 | 
			
		||||
        "nixpkgs-regression": "nixpkgs-regression"
 | 
			
		||||
      },
 | 
			
		||||
      "locked": {
 | 
			
		||||
        "lastModified": 1712911606,
 | 
			
		||||
        "narHash": "sha256-BGvBhepCufsjcUkXnEEXhEVjwdJAwPglCC2+bInc794=",
 | 
			
		||||
        "owner": "domenkozar",
 | 
			
		||||
        "repo": "nix",
 | 
			
		||||
        "rev": "b24a9318ea3f3600c1e24b4a00691ee912d4de12",
 | 
			
		||||
        "type": "github"
 | 
			
		||||
      },
 | 
			
		||||
      "original": {
 | 
			
		||||
        "owner": "domenkozar",
 | 
			
		||||
        "ref": "devenv-2.21",
 | 
			
		||||
        "repo": "nix",
 | 
			
		||||
        "type": "github"
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    "nix-github-actions": {
 | 
			
		||||
      "inputs": {
 | 
			
		||||
        "nixpkgs": [
 | 
			
		||||
          "devenv",
 | 
			
		||||
          "cachix",
 | 
			
		||||
          "devenv",
 | 
			
		||||
          "poetry2nix",
 | 
			
		||||
          "nixpkgs"
 | 
			
		||||
        ]
 | 
			
		||||
      },
 | 
			
		||||
      "locked": {
 | 
			
		||||
        "lastModified": 1688870561,
 | 
			
		||||
        "narHash": "sha256-4UYkifnPEw1nAzqqPOTL2MvWtm3sNGw1UTYTalkTcGY=",
 | 
			
		||||
        "owner": "nix-community",
 | 
			
		||||
        "repo": "nix-github-actions",
 | 
			
		||||
        "rev": "165b1650b753316aa7f1787f3005a8d2da0f5301",
 | 
			
		||||
        "type": "github"
 | 
			
		||||
      },
 | 
			
		||||
      "original": {
 | 
			
		||||
        "owner": "nix-community",
 | 
			
		||||
        "repo": "nix-github-actions",
 | 
			
		||||
        "type": "github"
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    "nix_2": {
 | 
			
		||||
      "inputs": {
 | 
			
		||||
        "flake-compat": [
 | 
			
		||||
          "devenv",
 | 
			
		||||
          "flake-compat"
 | 
			
		||||
        ],
 | 
			
		||||
        "nixpkgs": [
 | 
			
		||||
          "devenv",
 | 
			
		||||
          "nixpkgs"
 | 
			
		||||
        ],
 | 
			
		||||
        "nixpkgs-regression": "nixpkgs-regression_2"
 | 
			
		||||
      },
 | 
			
		||||
      "locked": {
 | 
			
		||||
        "lastModified": 1712911606,
 | 
			
		||||
        "narHash": "sha256-BGvBhepCufsjcUkXnEEXhEVjwdJAwPglCC2+bInc794=",
 | 
			
		||||
        "owner": "domenkozar",
 | 
			
		||||
        "repo": "nix",
 | 
			
		||||
        "rev": "b24a9318ea3f3600c1e24b4a00691ee912d4de12",
 | 
			
		||||
        "type": "github"
 | 
			
		||||
      },
 | 
			
		||||
      "original": {
 | 
			
		||||
        "owner": "domenkozar",
 | 
			
		||||
        "ref": "devenv-2.21",
 | 
			
		||||
        "repo": "nix",
 | 
			
		||||
        "type": "github"
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    "nixpkgs": {
 | 
			
		||||
      "locked": {
 | 
			
		||||
        "lastModified": 1692808169,
 | 
			
		||||
        "narHash": "sha256-x9Opq06rIiwdwGeK2Ykj69dNc2IvUH1fY55Wm7atwrE=",
 | 
			
		||||
        "owner": "NixOS",
 | 
			
		||||
        "repo": "nixpkgs",
 | 
			
		||||
        "rev": "9201b5ff357e781bf014d0330d18555695df7ba8",
 | 
			
		||||
        "type": "github"
 | 
			
		||||
      },
 | 
			
		||||
      "original": {
 | 
			
		||||
        "owner": "NixOS",
 | 
			
		||||
        "ref": "nixpkgs-unstable",
 | 
			
		||||
        "repo": "nixpkgs",
 | 
			
		||||
        "type": "github"
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    "nixpkgs-lib": {
 | 
			
		||||
      "locked": {
 | 
			
		||||
        "lastModified": 1717284937,
 | 
			
		||||
        "narHash": "sha256-lIbdfCsf8LMFloheeE6N31+BMIeixqyQWbSr2vk79EQ=",
 | 
			
		||||
        "type": "tarball",
 | 
			
		||||
        "url": "https://github.com/NixOS/nixpkgs/archive/eb9ceca17df2ea50a250b6b27f7bf6ab0186f198.tar.gz"
 | 
			
		||||
      },
 | 
			
		||||
      "original": {
 | 
			
		||||
        "type": "tarball",
 | 
			
		||||
        "url": "https://github.com/NixOS/nixpkgs/archive/eb9ceca17df2ea50a250b6b27f7bf6ab0186f198.tar.gz"
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    "nixpkgs-regression": {
 | 
			
		||||
      "locked": {
 | 
			
		||||
        "lastModified": 1643052045,
 | 
			
		||||
        "narHash": "sha256-uGJ0VXIhWKGXxkeNnq4TvV3CIOkUJ3PAoLZ3HMzNVMw=",
 | 
			
		||||
        "owner": "NixOS",
 | 
			
		||||
        "repo": "nixpkgs",
 | 
			
		||||
        "rev": "215d4d0fd80ca5163643b03a33fde804a29cc1e2",
 | 
			
		||||
        "type": "github"
 | 
			
		||||
      },
 | 
			
		||||
      "original": {
 | 
			
		||||
        "owner": "NixOS",
 | 
			
		||||
        "repo": "nixpkgs",
 | 
			
		||||
        "rev": "215d4d0fd80ca5163643b03a33fde804a29cc1e2",
 | 
			
		||||
        "type": "github"
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    "nixpkgs-regression_2": {
 | 
			
		||||
      "locked": {
 | 
			
		||||
        "lastModified": 1643052045,
 | 
			
		||||
        "narHash": "sha256-uGJ0VXIhWKGXxkeNnq4TvV3CIOkUJ3PAoLZ3HMzNVMw=",
 | 
			
		||||
        "owner": "NixOS",
 | 
			
		||||
        "repo": "nixpkgs",
 | 
			
		||||
        "rev": "215d4d0fd80ca5163643b03a33fde804a29cc1e2",
 | 
			
		||||
        "type": "github"
 | 
			
		||||
      },
 | 
			
		||||
      "original": {
 | 
			
		||||
        "owner": "NixOS",
 | 
			
		||||
        "repo": "nixpkgs",
 | 
			
		||||
        "rev": "215d4d0fd80ca5163643b03a33fde804a29cc1e2",
 | 
			
		||||
        "type": "github"
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    "nixpkgs-stable": {
 | 
			
		||||
      "locked": {
 | 
			
		||||
        "lastModified": 1710695816,
 | 
			
		||||
        "narHash": "sha256-3Eh7fhEID17pv9ZxrPwCLfqXnYP006RKzSs0JptsN84=",
 | 
			
		||||
        "owner": "NixOS",
 | 
			
		||||
        "repo": "nixpkgs",
 | 
			
		||||
        "rev": "614b4613980a522ba49f0d194531beddbb7220d3",
 | 
			
		||||
        "type": "github"
 | 
			
		||||
      },
 | 
			
		||||
      "original": {
 | 
			
		||||
        "owner": "NixOS",
 | 
			
		||||
        "ref": "nixos-23.11",
 | 
			
		||||
        "repo": "nixpkgs",
 | 
			
		||||
        "type": "github"
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    "nixpkgs_2": {
 | 
			
		||||
      "locked": {
 | 
			
		||||
        "lastModified": 1713361204,
 | 
			
		||||
        "narHash": "sha256-TA6EDunWTkc5FvDCqU3W2T3SFn0gRZqh6D/hJnM02MM=",
 | 
			
		||||
        "owner": "cachix",
 | 
			
		||||
        "repo": "devenv-nixpkgs",
 | 
			
		||||
        "rev": "285676e87ad9f0ca23d8714a6ab61e7e027020c6",
 | 
			
		||||
        "type": "github"
 | 
			
		||||
      },
 | 
			
		||||
      "original": {
 | 
			
		||||
        "owner": "cachix",
 | 
			
		||||
        "ref": "rolling",
 | 
			
		||||
        "repo": "devenv-nixpkgs",
 | 
			
		||||
        "type": "github"
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    "nixpkgs_3": {
 | 
			
		||||
      "locked": {
 | 
			
		||||
        "lastModified": 1717112898,
 | 
			
		||||
        "narHash": "sha256-7R2ZvOnvd9h8fDd65p0JnB7wXfUvreox3xFdYWd1BnY=",
 | 
			
		||||
        "owner": "NixOS",
 | 
			
		||||
        "repo": "nixpkgs",
 | 
			
		||||
        "rev": "6132b0f6e344ce2fe34fc051b72fb46e34f668e0",
 | 
			
		||||
        "type": "github"
 | 
			
		||||
      },
 | 
			
		||||
      "original": {
 | 
			
		||||
        "owner": "NixOS",
 | 
			
		||||
        "ref": "nixpkgs-unstable",
 | 
			
		||||
        "repo": "nixpkgs",
 | 
			
		||||
        "type": "github"
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    "poetry2nix": {
 | 
			
		||||
      "inputs": {
 | 
			
		||||
        "flake-utils": "flake-utils",
 | 
			
		||||
        "nix-github-actions": "nix-github-actions",
 | 
			
		||||
        "nixpkgs": [
 | 
			
		||||
          "devenv",
 | 
			
		||||
          "cachix",
 | 
			
		||||
          "devenv",
 | 
			
		||||
          "nixpkgs"
 | 
			
		||||
        ]
 | 
			
		||||
      },
 | 
			
		||||
      "locked": {
 | 
			
		||||
        "lastModified": 1692876271,
 | 
			
		||||
        "narHash": "sha256-IXfZEkI0Mal5y1jr6IRWMqK8GW2/f28xJenZIPQqkY0=",
 | 
			
		||||
        "owner": "nix-community",
 | 
			
		||||
        "repo": "poetry2nix",
 | 
			
		||||
        "rev": "d5006be9c2c2417dafb2e2e5034d83fabd207ee3",
 | 
			
		||||
        "type": "github"
 | 
			
		||||
      },
 | 
			
		||||
      "original": {
 | 
			
		||||
        "owner": "nix-community",
 | 
			
		||||
        "repo": "poetry2nix",
 | 
			
		||||
        "type": "github"
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    "pre-commit-hooks": {
 | 
			
		||||
      "inputs": {
 | 
			
		||||
        "flake-compat": [
 | 
			
		||||
          "devenv",
 | 
			
		||||
          "flake-compat"
 | 
			
		||||
        ],
 | 
			
		||||
        "flake-utils": "flake-utils_2",
 | 
			
		||||
        "gitignore": "gitignore",
 | 
			
		||||
        "nixpkgs": [
 | 
			
		||||
          "devenv",
 | 
			
		||||
          "nixpkgs"
 | 
			
		||||
        ],
 | 
			
		||||
        "nixpkgs-stable": "nixpkgs-stable"
 | 
			
		||||
      },
 | 
			
		||||
      "locked": {
 | 
			
		||||
        "lastModified": 1713775815,
 | 
			
		||||
        "narHash": "sha256-Wu9cdYTnGQQwtT20QQMg7jzkANKQjwBD9iccfGKkfls=",
 | 
			
		||||
        "owner": "cachix",
 | 
			
		||||
        "repo": "pre-commit-hooks.nix",
 | 
			
		||||
        "rev": "2ac4dcbf55ed43f3be0bae15e181f08a57af24a4",
 | 
			
		||||
        "type": "github"
 | 
			
		||||
      },
 | 
			
		||||
      "original": {
 | 
			
		||||
        "owner": "cachix",
 | 
			
		||||
        "repo": "pre-commit-hooks.nix",
 | 
			
		||||
        "type": "github"
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    "root": {
 | 
			
		||||
      "inputs": {
 | 
			
		||||
        "devenv": "devenv",
 | 
			
		||||
        "flake-parts": "flake-parts",
 | 
			
		||||
        "nixpkgs": "nixpkgs_3"
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    "systems": {
 | 
			
		||||
      "locked": {
 | 
			
		||||
        "lastModified": 1681028828,
 | 
			
		||||
        "narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=",
 | 
			
		||||
        "owner": "nix-systems",
 | 
			
		||||
        "repo": "default",
 | 
			
		||||
        "rev": "da67096a3b9bf56a91d16901293e51ba5b49a27e",
 | 
			
		||||
        "type": "github"
 | 
			
		||||
      },
 | 
			
		||||
      "original": {
 | 
			
		||||
        "owner": "nix-systems",
 | 
			
		||||
        "repo": "default",
 | 
			
		||||
        "type": "github"
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    "systems_2": {
 | 
			
		||||
      "locked": {
 | 
			
		||||
        "lastModified": 1681028828,
 | 
			
		||||
        "narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=",
 | 
			
		||||
        "owner": "nix-systems",
 | 
			
		||||
        "repo": "default",
 | 
			
		||||
        "rev": "da67096a3b9bf56a91d16901293e51ba5b49a27e",
 | 
			
		||||
        "type": "github"
 | 
			
		||||
      },
 | 
			
		||||
      "original": {
 | 
			
		||||
        "owner": "nix-systems",
 | 
			
		||||
        "repo": "default",
 | 
			
		||||
        "type": "github"
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
  },
 | 
			
		||||
  "root": "root",
 | 
			
		||||
  "version": 7
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										39
									
								
								vendor/github.com/go-viper/mapstructure/v2/flake.nix
									
										
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										39
									
								
								vendor/github.com/go-viper/mapstructure/v2/flake.nix
									
										
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,39 @@
 | 
			
		|||
{
 | 
			
		||||
  inputs = {
 | 
			
		||||
    nixpkgs.url = "github:NixOS/nixpkgs/nixpkgs-unstable";
 | 
			
		||||
    flake-parts.url = "github:hercules-ci/flake-parts";
 | 
			
		||||
    devenv.url = "github:cachix/devenv";
 | 
			
		||||
  };
 | 
			
		||||
 | 
			
		||||
  outputs = inputs@{ flake-parts, ... }:
 | 
			
		||||
    flake-parts.lib.mkFlake { inherit inputs; } {
 | 
			
		||||
      imports = [
 | 
			
		||||
        inputs.devenv.flakeModule
 | 
			
		||||
      ];
 | 
			
		||||
 | 
			
		||||
      systems = [ "x86_64-linux" "x86_64-darwin" "aarch64-darwin" ];
 | 
			
		||||
 | 
			
		||||
      perSystem = { config, self', inputs', pkgs, system, ... }: rec {
 | 
			
		||||
        devenv.shells = {
 | 
			
		||||
          default = {
 | 
			
		||||
            languages = {
 | 
			
		||||
              go.enable = true;
 | 
			
		||||
            };
 | 
			
		||||
 | 
			
		||||
            pre-commit.hooks = {
 | 
			
		||||
              nixpkgs-fmt.enable = true;
 | 
			
		||||
            };
 | 
			
		||||
 | 
			
		||||
            packages = with pkgs; [
 | 
			
		||||
              golangci-lint
 | 
			
		||||
            ];
 | 
			
		||||
 | 
			
		||||
            # https://github.com/cachix/devenv/issues/528#issuecomment-1556108767
 | 
			
		||||
            containers = pkgs.lib.mkForce { };
 | 
			
		||||
          };
 | 
			
		||||
 | 
			
		||||
          ci = devenv.shells.default;
 | 
			
		||||
        };
 | 
			
		||||
      };
 | 
			
		||||
    };
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										11
									
								
								vendor/github.com/go-viper/mapstructure/v2/internal/errors/errors.go
									
										
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										11
									
								
								vendor/github.com/go-viper/mapstructure/v2/internal/errors/errors.go
									
										
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,11 @@
 | 
			
		|||
package errors
 | 
			
		||||
 | 
			
		||||
import "errors"
 | 
			
		||||
 | 
			
		||||
func New(text string) error {
 | 
			
		||||
	return errors.New(text)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func As(err error, target interface{}) bool {
 | 
			
		||||
	return errors.As(err, target)
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										9
									
								
								vendor/github.com/go-viper/mapstructure/v2/internal/errors/join.go
									
										
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										9
									
								
								vendor/github.com/go-viper/mapstructure/v2/internal/errors/join.go
									
										
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,9 @@
 | 
			
		|||
//go:build go1.20
 | 
			
		||||
 | 
			
		||||
package errors
 | 
			
		||||
 | 
			
		||||
import "errors"
 | 
			
		||||
 | 
			
		||||
func Join(errs ...error) error {
 | 
			
		||||
	return errors.Join(errs...)
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										61
									
								
								vendor/github.com/go-viper/mapstructure/v2/internal/errors/join_go1_19.go
									
										
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										61
									
								
								vendor/github.com/go-viper/mapstructure/v2/internal/errors/join_go1_19.go
									
										
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,61 @@
 | 
			
		|||
//go:build !go1.20
 | 
			
		||||
 | 
			
		||||
// Copyright 2022 The Go Authors. All rights reserved.
 | 
			
		||||
// Use of this source code is governed by a BSD-style
 | 
			
		||||
// license that can be found in the LICENSE file.
 | 
			
		||||
 | 
			
		||||
package errors
 | 
			
		||||
 | 
			
		||||
// Join returns an error that wraps the given errors.
 | 
			
		||||
// Any nil error values are discarded.
 | 
			
		||||
// Join returns nil if every value in errs is nil.
 | 
			
		||||
// The error formats as the concatenation of the strings obtained
 | 
			
		||||
// by calling the Error method of each element of errs, with a newline
 | 
			
		||||
// between each string.
 | 
			
		||||
//
 | 
			
		||||
// A non-nil error returned by Join implements the Unwrap() []error method.
 | 
			
		||||
func Join(errs ...error) error {
 | 
			
		||||
	n := 0
 | 
			
		||||
	for _, err := range errs {
 | 
			
		||||
		if err != nil {
 | 
			
		||||
			n++
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
	if n == 0 {
 | 
			
		||||
		return nil
 | 
			
		||||
	}
 | 
			
		||||
	e := &joinError{
 | 
			
		||||
		errs: make([]error, 0, n),
 | 
			
		||||
	}
 | 
			
		||||
	for _, err := range errs {
 | 
			
		||||
		if err != nil {
 | 
			
		||||
			e.errs = append(e.errs, err)
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
	return e
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
type joinError struct {
 | 
			
		||||
	errs []error
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (e *joinError) Error() string {
 | 
			
		||||
	// Since Join returns nil if every value in errs is nil,
 | 
			
		||||
	// e.errs cannot be empty.
 | 
			
		||||
	if len(e.errs) == 1 {
 | 
			
		||||
		return e.errs[0].Error()
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	b := []byte(e.errs[0].Error())
 | 
			
		||||
	for _, err := range e.errs[1:] {
 | 
			
		||||
		b = append(b, '\n')
 | 
			
		||||
		b = append(b, err.Error()...)
 | 
			
		||||
	}
 | 
			
		||||
	// At this point, b has at least one byte '\n'.
 | 
			
		||||
	// return unsafe.String(&b[0], len(b))
 | 
			
		||||
	return string(b)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (e *joinError) Unwrap() []error {
 | 
			
		||||
	return e.errs
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										1620
									
								
								vendor/github.com/go-viper/mapstructure/v2/mapstructure.go
									
										
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										1620
									
								
								vendor/github.com/go-viper/mapstructure/v2/mapstructure.go
									
										
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
										
											
												File diff suppressed because it is too large
												Load diff
											
										
									
								
							
							
								
								
									
										44
									
								
								vendor/github.com/go-viper/mapstructure/v2/reflect_go1_19.go
									
										
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										44
									
								
								vendor/github.com/go-viper/mapstructure/v2/reflect_go1_19.go
									
										
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,44 @@
 | 
			
		|||
//go:build !go1.20
 | 
			
		||||
 | 
			
		||||
package mapstructure
 | 
			
		||||
 | 
			
		||||
import "reflect"
 | 
			
		||||
 | 
			
		||||
func isComparable(v reflect.Value) bool {
 | 
			
		||||
	k := v.Kind()
 | 
			
		||||
	switch k {
 | 
			
		||||
	case reflect.Invalid:
 | 
			
		||||
		return false
 | 
			
		||||
 | 
			
		||||
	case reflect.Array:
 | 
			
		||||
		switch v.Type().Elem().Kind() {
 | 
			
		||||
		case reflect.Interface, reflect.Array, reflect.Struct:
 | 
			
		||||
			for i := 0; i < v.Type().Len(); i++ {
 | 
			
		||||
				// if !v.Index(i).Comparable() {
 | 
			
		||||
				if !isComparable(v.Index(i)) {
 | 
			
		||||
					return false
 | 
			
		||||
				}
 | 
			
		||||
			}
 | 
			
		||||
			return true
 | 
			
		||||
		}
 | 
			
		||||
		return v.Type().Comparable()
 | 
			
		||||
 | 
			
		||||
	case reflect.Interface:
 | 
			
		||||
		// return v.Elem().Comparable()
 | 
			
		||||
		return isComparable(v.Elem())
 | 
			
		||||
 | 
			
		||||
	case reflect.Struct:
 | 
			
		||||
		for i := 0; i < v.NumField(); i++ {
 | 
			
		||||
			return false
 | 
			
		||||
 | 
			
		||||
			// if !v.Field(i).Comparable() {
 | 
			
		||||
			if !isComparable(v.Field(i)) {
 | 
			
		||||
				return false
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
		return true
 | 
			
		||||
 | 
			
		||||
	default:
 | 
			
		||||
		return v.Type().Comparable()
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										10
									
								
								vendor/github.com/go-viper/mapstructure/v2/reflect_go1_20.go
									
										
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										10
									
								
								vendor/github.com/go-viper/mapstructure/v2/reflect_go1_20.go
									
										
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,10 @@
 | 
			
		|||
//go:build go1.20
 | 
			
		||||
 | 
			
		||||
package mapstructure
 | 
			
		||||
 | 
			
		||||
import "reflect"
 | 
			
		||||
 | 
			
		||||
// TODO: remove once we drop support for Go <1.20
 | 
			
		||||
func isComparable(v reflect.Value) bool {
 | 
			
		||||
	return v.Comparable()
 | 
			
		||||
}
 | 
			
		||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue