v0.0.419 JsonOpt
Some checks failed
Build Docker and Deploy / Run goext test-suite (push) Failing after 39s
Some checks failed
Build Docker and Deploy / Run goext test-suite (push) Failing after 39s
This commit is contained in:
parent
f0347a9435
commit
9955eacf96
67
dataext/optional.go
Normal file
67
dataext/optional.go
Normal file
@ -0,0 +1,67 @@
|
||||
package dataext
|
||||
|
||||
import (
|
||||
"encoding/json"
|
||||
"errors"
|
||||
)
|
||||
|
||||
type JsonTwoWayMarshal interface {
|
||||
json.Marshaler
|
||||
json.Unmarshaler
|
||||
}
|
||||
|
||||
type JsonOpt[T JsonTwoWayMarshal] struct {
|
||||
isSet bool
|
||||
value T
|
||||
}
|
||||
|
||||
// MarshalJSON returns m as the JSON encoding of m.
|
||||
func (m JsonOpt[T]) MarshalJSON() ([]byte, error) {
|
||||
if !m.isSet {
|
||||
return []byte("null"), nil // actually this would be undefined - but undefined is not valid JSON
|
||||
}
|
||||
|
||||
if m.value == nil {
|
||||
return []byte("null"), nil
|
||||
}
|
||||
|
||||
return m.MarshalJSON()
|
||||
}
|
||||
|
||||
// UnmarshalJSON sets *m to a copy of data.
|
||||
func (m *JsonOpt[T]) UnmarshalJSON(data []byte) error {
|
||||
if m == nil {
|
||||
return errors.New("JsonOpt: UnmarshalJSON on nil pointer")
|
||||
}
|
||||
|
||||
return m.value.UnmarshalJSON(data)
|
||||
}
|
||||
|
||||
func (m JsonOpt[T]) IsSet() bool {
|
||||
return m.isSet
|
||||
}
|
||||
|
||||
func (m JsonOpt[T]) IsUnset() bool {
|
||||
return !m.isSet
|
||||
}
|
||||
|
||||
func (m JsonOpt[T]) Value() (T, bool) {
|
||||
if !m.isSet {
|
||||
return *new(T), false
|
||||
}
|
||||
return m.value, true
|
||||
}
|
||||
|
||||
func (m JsonOpt[T]) ValueOrNil() *T {
|
||||
if !m.isSet {
|
||||
return nil
|
||||
}
|
||||
return &m.value
|
||||
}
|
||||
|
||||
func (m JsonOpt[T]) MustValue() T {
|
||||
if !m.isSet {
|
||||
panic("value not set")
|
||||
}
|
||||
return m.value
|
||||
}
|
@ -1,5 +1,5 @@
|
||||
package goext
|
||||
|
||||
const GoextVersion = "0.0.418"
|
||||
const GoextVersion = "0.0.419"
|
||||
|
||||
const GoextVersionTimestamp = "2024-03-20T09:42:06+0100"
|
||||
const GoextVersionTimestamp = "2024-03-23T17:49:56+0100"
|
||||
|
Loading…
Reference in New Issue
Block a user