initial commits

master
Charles Iliya Krempeaux 2023-09-26 13:41:23 +09:00
parent 16a8523f6f
commit 7dabefe14b
1 changed files with 32 additions and 5 deletions

View File

@ -3,6 +3,7 @@ package mstdn
import (
"encoding/json"
"sourcecode.social/reiver/go-erorr"
"sourcecode.social/reiver/go-opt"
"sourcecode.social/reiver/go-nul"
)
@ -10,6 +11,11 @@ import (
var _ json.Marshaler = Field{}
var _ json.Unmarshaler = &Field{}
const (
errCannotMashalFieldAsJSONNoName = erorr.Error("cannot marshal mstdn.Field to JSON — no name set")
errCannotMashalFieldAsJSONNoValue = erorr.Error("cannot marshal mstdn.Field to JSON — no value set")
)
// Field represents a Mastodon API "Field".
//
// See:
@ -37,13 +43,34 @@ func FieldVerifiedNameValue(when string, name string, value string) Field {
func (receiver Field) MarshalJSON() ([]byte, error) {
duplicate := receiver
var data = map[string]interface{}{}
duplicate.VerifiedAt.WhenNothing(func(){
duplicate.VerifiedAt = nul.Null[string]()
})
{
val, found := receiver.Name.Get()
if !found {
return nil, errCannotMashalFieldAsJSONNoName
}
return json.Marshal(duplicate)
data["name"] = val
}
{
val, found := receiver.Value.Get()
if !found {
return nil, errCannotMashalFieldAsJSONNoValue
}
data["value"] = val
}
{
val, found := receiver.VerifiedAt.Get()
if !found {
data["verified_at"] = nil
} else {
data["verified_at"] = val
}
}
return json.Marshal(data)
}
func (receiver *Field) UnmarshalJSON(data []byte) error {