diff options
| author | mo khan <mo@mokhan.ca> | 2025-07-22 17:35:49 -0600 |
|---|---|---|
| committer | mo khan <mo@mokhan.ca> | 2025-07-22 17:35:49 -0600 |
| commit | 20ef0d92694465ac86b550df139e8366a0a2b4fa (patch) | |
| tree | 3f14589e1ce6eb9306a3af31c3a1f9e1af5ed637 /vendor/github.com/creasty/defaults/README.md | |
| parent | 44e0d272c040cdc53a98b9f1dc58ae7da67752e6 (diff) | |
feat: connect to spicedb
Diffstat (limited to 'vendor/github.com/creasty/defaults/README.md')
| -rw-r--r-- | vendor/github.com/creasty/defaults/README.md | 160 |
1 files changed, 160 insertions, 0 deletions
diff --git a/vendor/github.com/creasty/defaults/README.md b/vendor/github.com/creasty/defaults/README.md new file mode 100644 index 0000000..e8096b6 --- /dev/null +++ b/vendor/github.com/creasty/defaults/README.md @@ -0,0 +1,160 @@ +defaults +======== + +[](https://circleci.com/gh/creasty/defaults/tree/master) +[](https://codecov.io/gh/creasty/defaults) +[](https://github.com/creasty/defaults/releases) +[](./LICENSE) + +Initialize structs with default values + +- Supports almost all kind of types + - Scalar types + - `int/8/16/32/64`, `uint/8/16/32/64`, `float32/64` + - `uintptr`, `bool`, `string` + - Complex types + - `map`, `slice`, `struct` + - Nested types + - `map[K1]map[K2]Struct`, `[]map[K1]Struct[]` + - Aliased types + - `time.Duration` + - e.g., `type Enum string` + - Pointer types + - e.g., `*SampleStruct`, `*int` +- Recursively initializes fields in a struct +- Dynamically sets default values by [`defaults.Setter`](./setter.go) interface +- Preserves non-initial values from being reset with a default value + + +Usage +----- + +```go +package main + +import ( + "encoding/json" + "fmt" + "math/rand" + + "github.com/creasty/defaults" +) + +type Gender string + +type Sample struct { + Name string `default:"John Smith"` + Age int `default:"27"` + Gender Gender `default:"m"` + Working bool `default:"true"` + + SliceInt []int `default:"[1, 2, 3]"` + SlicePtr []*int `default:"[1, 2, 3]"` + SliceString []string `default:"[\"a\", \"b\"]"` + + MapNull map[string]int `default:"{}"` + Map map[string]int `default:"{\"key1\": 123}"` + MapOfStruct map[string]OtherStruct `default:"{\"Key2\": {\"Foo\":123}}"` + MapOfPtrStruct map[string]*OtherStruct `default:"{\"Key3\": {\"Foo\":123}}"` + MapOfStructWithTag map[string]OtherStruct `default:"{\"Key4\": {\"Foo\":123}}"` + + Struct OtherStruct `default:"{\"Foo\": 123}"` + StructPtr *OtherStruct `default:"{\"Foo\": 123}"` + + NoTag OtherStruct // Recurses into a nested struct by default + NoOption OtherStruct `default:"-"` // no option +} + +type OtherStruct struct { + Hello string `default:"world"` // Tags in a nested struct also work + Foo int `default:"-"` + Random int `default:"-"` +} + +// SetDefaults implements defaults.Setter interface +func (s *OtherStruct) SetDefaults() { + if defaults.CanUpdate(s.Random) { // Check if it's a zero value (recommended) + s.Random = rand.Int() // Set a dynamic value + } +} + +func main() { + obj := &Sample{} + if err := defaults.Set(obj); err != nil { + panic(err) + } + + out, err := json.MarshalIndent(obj, "", " ") + if err != nil { + panic(err) + } + fmt.Println(string(out)) + + // Output: + // { + // "Name": "John Smith", + // "Age": 27, + // "Gender": "m", + // "Working": true, + // "SliceInt": [ + // 1, + // 2, + // 3 + // ], + // "SlicePtr": [ + // 1, + // 2, + // 3 + // ], + // "SliceString": [ + // "a", + // "b" + // ], + // "MapNull": {}, + // "Map": { + // "key1": 123 + // }, + // "MapOfStruct": { + // "Key2": { + // "Hello": "world", + // "Foo": 123, + // "Random": 5577006791947779410 + // } + // }, + // "MapOfPtrStruct": { + // "Key3": { + // "Hello": "world", + // "Foo": 123, + // "Random": 8674665223082153551 + // } + // }, + // "MapOfStructWithTag": { + // "Key4": { + // "Hello": "world", + // "Foo": 123, + // "Random": 6129484611666145821 + // } + // }, + // "Struct": { + // "Hello": "world", + // "Foo": 123, + // "Random": 4037200794235010051 + // }, + // "StructPtr": { + // "Hello": "world", + // "Foo": 123, + // "Random": 3916589616287113937 + // }, + // "NoTag": { + // "Hello": "world", + // "Foo": 0, + // "Random": 6334824724549167320 + // }, + // "NoOption": { + // "Hello": "", + // "Foo": 0, + // "Random": 0 + // } + // } +} +``` |
