21
0
Fork 0

v0.0.419 JsonOpt
Build Docker and Deploy / Run goext test-suite (push) Failing after 39s Details

This commit is contained in:
Mike Schwörer 2024-03-23 17:49:56 +01:00
parent f0347a9435
commit 9955eacf96
Signed by: Mikescher
GPG Key ID: D3C7172E0A70F8CF
2 changed files with 69 additions and 2 deletions

67
dataext/optional.go Normal file
View 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
}

View File

@ -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"