diff options
Diffstat (limited to 'optional/json.go')
-rw-r--r-- | optional/json.go | 35 |
1 files changed, 35 insertions, 0 deletions
diff --git a/optional/json.go b/optional/json.go new file mode 100644 index 0000000..23aa780 --- /dev/null +++ b/optional/json.go @@ -0,0 +1,35 @@ +package optional + +import ( + "encoding/json" +) + +func (o *Optional[T]) UnmarshalJSON(data []byte) error { + var Buffer *T + + err := json.Unmarshal(data, &Buffer) + if err != nil { + return err + } + + if Buffer == nil { + var empty T + o.Value = empty + o.Exists = false + return nil + } + + o.Value = *Buffer + o.Exists = true + return nil +} + +func (o Optional[T]) MarshalJSON() ([]byte, error) { + var Buffer *T + + if o.Exists { + Buffer = &o.Value + } + + return json.Marshal(Buffer) +} |