summaryrefslogtreecommitdiff
path: root/vendor/github.com/creasty/defaults/README.md
diff options
context:
space:
mode:
authormo khan <mo@mokhan.ca>2025-07-22 17:35:49 -0600
committermo khan <mo@mokhan.ca>2025-07-22 17:35:49 -0600
commit20ef0d92694465ac86b550df139e8366a0a2b4fa (patch)
tree3f14589e1ce6eb9306a3af31c3a1f9e1af5ed637 /vendor/github.com/creasty/defaults/README.md
parent44e0d272c040cdc53a98b9f1dc58ae7da67752e6 (diff)
feat: connect to spicedb
Diffstat (limited to 'vendor/github.com/creasty/defaults/README.md')
-rw-r--r--vendor/github.com/creasty/defaults/README.md160
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
+========
+
+[![CircleCI](https://circleci.com/gh/creasty/defaults/tree/master.svg?style=svg)](https://circleci.com/gh/creasty/defaults/tree/master)
+[![codecov](https://codecov.io/gh/creasty/defaults/branch/master/graph/badge.svg)](https://codecov.io/gh/creasty/defaults)
+[![GitHub release](https://img.shields.io/github/release/creasty/defaults.svg)](https://github.com/creasty/defaults/releases)
+[![License](https://img.shields.io/github/license/creasty/defaults.svg)](./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
+ // }
+ // }
+}
+```