mstdn/ent.Field

master
Charles Iliya Krempeaux 2024-08-08 12:27:55 -07:00
parent 837edc6382
commit c70db317e0
3 changed files with 5 additions and 81 deletions

View File

@ -1,34 +1,18 @@
package ent package ent
import ( import (
"encoding/json"
"github.com/reiver/go-erorr"
"github.com/reiver/go-opt" "github.com/reiver/go-opt"
"github.com/reiver/go-nul" "github.com/reiver/go-nul"
) )
var _ json.Marshaler = Field{}
var _ json.Unmarshaler = &Field{}
const (
errCannotMashalFieldAsJSONNoName = erorr.Error("cannot marshal ent.Field to JSON — no name set")
errCannotMashalFieldAsJSONNoValue = erorr.Error("cannot marshal ent.Field to JSON — no value set")
)
// Field represents a Mastodon API "Field". // Field represents a Mastodon API "Field".
// //
// See: // See:
// https://docs.joinmastodon.org/entities/Field/ // https://docs.joinmastodon.org/entities/Field/
type Field struct { type Field struct {
Name opt.Optional[string] Name opt.Optional[string] `json:"name,omitempty"`
Value opt.Optional[string] Value opt.Optional[string] `json:"value,omitempty"`
VerifiedAt nul.Nullable[string]
}
type field struct {
Name opt.Optional[string] `json:"name"`
Value opt.Optional[string] `json:"value"`
VerifiedAt nul.Nullable[string] `json:"verified_at"` VerifiedAt nul.Nullable[string] `json:"verified_at"`
} }
@ -36,6 +20,7 @@ func FieldNameValue(name string, value string) Field {
return Field{ return Field{
Name: opt.Something(name), Name: opt.Something(name),
Value: opt.Something(value), Value: opt.Something(value),
VerifiedAt: nul.Null[string](),
} }
} }
@ -46,60 +31,3 @@ func FieldVerifiedNameValue(when string, name string, value string) Field {
VerifiedAt: nul.Something(when), VerifiedAt: nul.Something(when),
} }
} }
func (receiver Field) MarshalJSON() ([]byte, error) {
var data = map[string]interface{}{}
{
val, found := receiver.Name.Get()
if !found {
return nil, errCannotMashalFieldAsJSONNoName
}
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 {
if nil == receiver {
return errNilReceiver
}
var f field
err := json.Unmarshal(data, &f)
if nil != err {
return err
}
if nul.Null[string]() == f.VerifiedAt {
f.VerifiedAt = nul.Nothing[string]()
}
*receiver = Field{
Name: f.Name,
Value: f.Value,
VerifiedAt: f.VerifiedAt,
}
return nil
}

View File

@ -4,8 +4,8 @@ import (
"testing" "testing"
"bytes" "bytes"
"encoding/json"
"github.com/reiver/go-json"
"github.com/reiver/go-mstdn/ent" "github.com/reiver/go-mstdn/ent"
) )
@ -112,7 +112,7 @@ func TestField_MarshalJSON(t *testing.T) {
for testNumber, test := range tests { for testNumber, test := range tests {
actualBytes, err := test.Value.MarshalJSON() actualBytes, err := json.Marshal(test.Value)
if nil != err { if nil != err {
t.Errorf("For test #%d, did not expect to get an error but actually got one.", testNumber) t.Errorf("For test #%d, did not expect to get an error but actually got one.", testNumber)
t.Logf("ERROR: (%T) %s", err, err) t.Logf("ERROR: (%T) %s", err, err)

View File

@ -14,10 +14,6 @@ func TestField_UnmarshalJSON(t *testing.T) {
JSON string JSON string
Expected ent.Field Expected ent.Field
}{ }{
{
JSON: `{"name":"Location","value":"Metro Vancouver"}`,
Expected: ent.FieldNameValue("Location", "Metro Vancouver"),
},
{ {
JSON: `{"name":"Location","value":"Metro Vancouver", "verified_at":null}`, JSON: `{"name":"Location","value":"Metro Vancouver", "verified_at":null}`,
Expected: ent.FieldNameValue("Location", "Metro Vancouver"), Expected: ent.FieldNameValue("Location", "Metro Vancouver"),