mirror of
				https://github.com/superseriousbusiness/gotosocial.git
				synced 2025-10-31 08:02:27 -05:00 
			
		
		
		
	Implement Cobra CLI tooling, Viper config tooling (#336)
* start pulling out + replacing urfave and config * replace many many instances of config * move more stuff => viper * properly remove urfave * move some flags to root command * add testrig commands to root * alias config file keys * start adding cli parsing tests * reorder viper init * remove config path alias * fmt * change config file keys to non-nested * we're more or less in business now * tidy up the common func * go fmt * get tests passing again * add note about the cliparsing tests * reorganize * update docs with changes * structure cmd dir better * rename + move some files around * fix dangling comma
This commit is contained in:
		
					parent
					
						
							
								182b4eea73
							
						
					
				
			
			
				commit
				
					
						0884f89431
					
				
			
		
					 487 changed files with 46667 additions and 8831 deletions
				
			
		
							
								
								
									
										61
									
								
								vendor/github.com/spf13/viper/internal/encoding/decoder.go
									
										
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										61
									
								
								vendor/github.com/spf13/viper/internal/encoding/decoder.go
									
										
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							|  | @ -0,0 +1,61 @@ | |||
| package encoding | ||||
| 
 | ||||
| import ( | ||||
| 	"sync" | ||||
| ) | ||||
| 
 | ||||
| // Decoder decodes the contents of b into a v representation. | ||||
| // It's primarily used for decoding contents of a file into a map[string]interface{}. | ||||
| type Decoder interface { | ||||
| 	Decode(b []byte, v interface{}) error | ||||
| } | ||||
| 
 | ||||
| const ( | ||||
| 	// ErrDecoderNotFound is returned when there is no decoder registered for a format. | ||||
| 	ErrDecoderNotFound = encodingError("decoder not found for this format") | ||||
| 
 | ||||
| 	// ErrDecoderFormatAlreadyRegistered is returned when an decoder is already registered for a format. | ||||
| 	ErrDecoderFormatAlreadyRegistered = encodingError("decoder already registered for this format") | ||||
| ) | ||||
| 
 | ||||
| // DecoderRegistry can choose an appropriate Decoder based on the provided format. | ||||
| type DecoderRegistry struct { | ||||
| 	decoders map[string]Decoder | ||||
| 
 | ||||
| 	mu sync.RWMutex | ||||
| } | ||||
| 
 | ||||
| // NewDecoderRegistry returns a new, initialized DecoderRegistry. | ||||
| func NewDecoderRegistry() *DecoderRegistry { | ||||
| 	return &DecoderRegistry{ | ||||
| 		decoders: make(map[string]Decoder), | ||||
| 	} | ||||
| } | ||||
| 
 | ||||
| // RegisterDecoder registers a Decoder for a format. | ||||
| // Registering a Decoder for an already existing format is not supported. | ||||
| func (e *DecoderRegistry) RegisterDecoder(format string, enc Decoder) error { | ||||
| 	e.mu.Lock() | ||||
| 	defer e.mu.Unlock() | ||||
| 
 | ||||
| 	if _, ok := e.decoders[format]; ok { | ||||
| 		return ErrDecoderFormatAlreadyRegistered | ||||
| 	} | ||||
| 
 | ||||
| 	e.decoders[format] = enc | ||||
| 
 | ||||
| 	return nil | ||||
| } | ||||
| 
 | ||||
| // Decode calls the underlying Decoder based on the format. | ||||
| func (e *DecoderRegistry) Decode(format string, b []byte, v interface{}) error { | ||||
| 	e.mu.RLock() | ||||
| 	decoder, ok := e.decoders[format] | ||||
| 	e.mu.RUnlock() | ||||
| 
 | ||||
| 	if !ok { | ||||
| 		return ErrDecoderNotFound | ||||
| 	} | ||||
| 
 | ||||
| 	return decoder.Decode(b, v) | ||||
| } | ||||
							
								
								
									
										60
									
								
								vendor/github.com/spf13/viper/internal/encoding/encoder.go
									
										
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										60
									
								
								vendor/github.com/spf13/viper/internal/encoding/encoder.go
									
										
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							|  | @ -0,0 +1,60 @@ | |||
| package encoding | ||||
| 
 | ||||
| import ( | ||||
| 	"sync" | ||||
| ) | ||||
| 
 | ||||
| // Encoder encodes the contents of v into a byte representation. | ||||
| // It's primarily used for encoding a map[string]interface{} into a file format. | ||||
| type Encoder interface { | ||||
| 	Encode(v interface{}) ([]byte, error) | ||||
| } | ||||
| 
 | ||||
| const ( | ||||
| 	// ErrEncoderNotFound is returned when there is no encoder registered for a format. | ||||
| 	ErrEncoderNotFound = encodingError("encoder not found for this format") | ||||
| 
 | ||||
| 	// ErrEncoderFormatAlreadyRegistered is returned when an encoder is already registered for a format. | ||||
| 	ErrEncoderFormatAlreadyRegistered = encodingError("encoder already registered for this format") | ||||
| ) | ||||
| 
 | ||||
| // EncoderRegistry can choose an appropriate Encoder based on the provided format. | ||||
| type EncoderRegistry struct { | ||||
| 	encoders map[string]Encoder | ||||
| 
 | ||||
| 	mu sync.RWMutex | ||||
| } | ||||
| 
 | ||||
| // NewEncoderRegistry returns a new, initialized EncoderRegistry. | ||||
| func NewEncoderRegistry() *EncoderRegistry { | ||||
| 	return &EncoderRegistry{ | ||||
| 		encoders: make(map[string]Encoder), | ||||
| 	} | ||||
| } | ||||
| 
 | ||||
| // RegisterEncoder registers an Encoder for a format. | ||||
| // Registering a Encoder for an already existing format is not supported. | ||||
| func (e *EncoderRegistry) RegisterEncoder(format string, enc Encoder) error { | ||||
| 	e.mu.Lock() | ||||
| 	defer e.mu.Unlock() | ||||
| 
 | ||||
| 	if _, ok := e.encoders[format]; ok { | ||||
| 		return ErrEncoderFormatAlreadyRegistered | ||||
| 	} | ||||
| 
 | ||||
| 	e.encoders[format] = enc | ||||
| 
 | ||||
| 	return nil | ||||
| } | ||||
| 
 | ||||
| func (e *EncoderRegistry) Encode(format string, v interface{}) ([]byte, error) { | ||||
| 	e.mu.RLock() | ||||
| 	encoder, ok := e.encoders[format] | ||||
| 	e.mu.RUnlock() | ||||
| 
 | ||||
| 	if !ok { | ||||
| 		return nil, ErrEncoderNotFound | ||||
| 	} | ||||
| 
 | ||||
| 	return encoder.Encode(v) | ||||
| } | ||||
							
								
								
									
										7
									
								
								vendor/github.com/spf13/viper/internal/encoding/error.go
									
										
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										7
									
								
								vendor/github.com/spf13/viper/internal/encoding/error.go
									
										
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							|  | @ -0,0 +1,7 @@ | |||
| package encoding | ||||
| 
 | ||||
| type encodingError string | ||||
| 
 | ||||
| func (e encodingError) Error() string { | ||||
| 	return string(e) | ||||
| } | ||||
							
								
								
									
										40
									
								
								vendor/github.com/spf13/viper/internal/encoding/hcl/codec.go
									
										
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										40
									
								
								vendor/github.com/spf13/viper/internal/encoding/hcl/codec.go
									
										
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							|  | @ -0,0 +1,40 @@ | |||
| package hcl | ||||
| 
 | ||||
| import ( | ||||
| 	"bytes" | ||||
| 	"encoding/json" | ||||
| 
 | ||||
| 	"github.com/hashicorp/hcl" | ||||
| 	"github.com/hashicorp/hcl/hcl/printer" | ||||
| ) | ||||
| 
 | ||||
| // Codec implements the encoding.Encoder and encoding.Decoder interfaces for HCL encoding. | ||||
| // TODO: add printer config to the codec? | ||||
| type Codec struct{} | ||||
| 
 | ||||
| func (Codec) Encode(v interface{}) ([]byte, error) { | ||||
| 	b, err := json.Marshal(v) | ||||
| 	if err != nil { | ||||
| 		return nil, err | ||||
| 	} | ||||
| 
 | ||||
| 	// TODO: use printer.Format? Is the trailing newline an issue? | ||||
| 
 | ||||
| 	ast, err := hcl.Parse(string(b)) | ||||
| 	if err != nil { | ||||
| 		return nil, err | ||||
| 	} | ||||
| 
 | ||||
| 	var buf bytes.Buffer | ||||
| 
 | ||||
| 	err = printer.Fprint(&buf, ast.Node) | ||||
| 	if err != nil { | ||||
| 		return nil, err | ||||
| 	} | ||||
| 
 | ||||
| 	return buf.Bytes(), nil | ||||
| } | ||||
| 
 | ||||
| func (Codec) Decode(b []byte, v interface{}) error { | ||||
| 	return hcl.Unmarshal(b, v) | ||||
| } | ||||
							
								
								
									
										17
									
								
								vendor/github.com/spf13/viper/internal/encoding/json/codec.go
									
										
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										17
									
								
								vendor/github.com/spf13/viper/internal/encoding/json/codec.go
									
										
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							|  | @ -0,0 +1,17 @@ | |||
| package json | ||||
| 
 | ||||
| import ( | ||||
| 	"encoding/json" | ||||
| ) | ||||
| 
 | ||||
| // Codec implements the encoding.Encoder and encoding.Decoder interfaces for JSON encoding. | ||||
| type Codec struct{} | ||||
| 
 | ||||
| func (Codec) Encode(v interface{}) ([]byte, error) { | ||||
| 	// TODO: expose prefix and indent in the Codec as setting? | ||||
| 	return json.MarshalIndent(v, "", "  ") | ||||
| } | ||||
| 
 | ||||
| func (Codec) Decode(b []byte, v interface{}) error { | ||||
| 	return json.Unmarshal(b, v) | ||||
| } | ||||
							
								
								
									
										45
									
								
								vendor/github.com/spf13/viper/internal/encoding/toml/codec.go
									
										
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										45
									
								
								vendor/github.com/spf13/viper/internal/encoding/toml/codec.go
									
										
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							|  | @ -0,0 +1,45 @@ | |||
| package toml | ||||
| 
 | ||||
| import ( | ||||
| 	"github.com/pelletier/go-toml" | ||||
| ) | ||||
| 
 | ||||
| // Codec implements the encoding.Encoder and encoding.Decoder interfaces for TOML encoding. | ||||
| type Codec struct{} | ||||
| 
 | ||||
| func (Codec) Encode(v interface{}) ([]byte, error) { | ||||
| 	if m, ok := v.(map[string]interface{}); ok { | ||||
| 		t, err := toml.TreeFromMap(m) | ||||
| 		if err != nil { | ||||
| 			return nil, err | ||||
| 		} | ||||
| 
 | ||||
| 		s, err := t.ToTomlString() | ||||
| 		if err != nil { | ||||
| 			return nil, err | ||||
| 		} | ||||
| 
 | ||||
| 		return []byte(s), nil | ||||
| 	} | ||||
| 
 | ||||
| 	return toml.Marshal(v) | ||||
| } | ||||
| 
 | ||||
| func (Codec) Decode(b []byte, v interface{}) error { | ||||
| 	tree, err := toml.LoadBytes(b) | ||||
| 	if err != nil { | ||||
| 		return err | ||||
| 	} | ||||
| 
 | ||||
| 	if m, ok := v.(*map[string]interface{}); ok { | ||||
| 		vmap := *m | ||||
| 		tmap := tree.ToMap() | ||||
| 		for k, v := range tmap { | ||||
| 			vmap[k] = v | ||||
| 		} | ||||
| 
 | ||||
| 		return nil | ||||
| 	} | ||||
| 
 | ||||
| 	return tree.Unmarshal(v) | ||||
| } | ||||
							
								
								
									
										14
									
								
								vendor/github.com/spf13/viper/internal/encoding/yaml/codec.go
									
										
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										14
									
								
								vendor/github.com/spf13/viper/internal/encoding/yaml/codec.go
									
										
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							|  | @ -0,0 +1,14 @@ | |||
| package yaml | ||||
| 
 | ||||
| import "gopkg.in/yaml.v2" | ||||
| 
 | ||||
| // Codec implements the encoding.Encoder and encoding.Decoder interfaces for YAML encoding. | ||||
| type Codec struct{} | ||||
| 
 | ||||
| func (Codec) Encode(v interface{}) ([]byte, error) { | ||||
| 	return yaml.Marshal(v) | ||||
| } | ||||
| 
 | ||||
| func (Codec) Decode(b []byte, v interface{}) error { | ||||
| 	return yaml.Unmarshal(b, v) | ||||
| } | ||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue