summaryrefslogtreecommitdiff
path: root/optional/json.go
diff options
context:
space:
mode:
Diffstat (limited to 'optional/json.go')
-rw-r--r--optional/json.go35
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)
+}