MarshalText for null.String

forgot to add this
This commit is contained in:
Greg 2016-02-28 09:53:16 +09:00
parent aa8aa51503
commit 41961cea03
2 changed files with 18 additions and 0 deletions

View file

@ -73,6 +73,15 @@ func (s String) MarshalJSON() ([]byte, error) {
return json.Marshal(s.String) return json.Marshal(s.String)
} }
// MarshalText implements encoding.TextMarshaler.
// It will encode a blank string when this String is null.
func (s String) MarshalText() ([]byte, error) {
if !s.Valid {
return []byte{}, nil
}
return []byte(s.String), nil
}
// UnmarshalText implements encoding.TextUnmarshaler. // UnmarshalText implements encoding.TextUnmarshaler.
// It will unmarshal to a null String if the input is a blank string. // It will unmarshal to a null String if the input is a blank string.
func (s *String) UnmarshalText(text []byte) error { func (s *String) UnmarshalText(text []byte) error {

View file

@ -93,17 +93,26 @@ func TestMarshalString(t *testing.T) {
data, err := json.Marshal(str) data, err := json.Marshal(str)
maybePanic(err) maybePanic(err)
assertJSONEquals(t, data, `"test"`, "non-empty json marshal") assertJSONEquals(t, data, `"test"`, "non-empty json marshal")
data, err = str.MarshalText()
maybePanic(err)
assertJSONEquals(t, data, "test", "non-empty text marshal")
// empty values should be encoded as an empty string // empty values should be encoded as an empty string
zero := StringFrom("") zero := StringFrom("")
data, err = json.Marshal(zero) data, err = json.Marshal(zero)
maybePanic(err) maybePanic(err)
assertJSONEquals(t, data, `""`, "empty json marshal") assertJSONEquals(t, data, `""`, "empty json marshal")
data, err = zero.MarshalText()
maybePanic(err)
assertJSONEquals(t, data, "", "string marshal text")
null := StringFromPtr(nil) null := StringFromPtr(nil)
data, err = json.Marshal(null) data, err = json.Marshal(null)
maybePanic(err) maybePanic(err)
assertJSONEquals(t, data, `null`, "null json marshal") assertJSONEquals(t, data, `null`, "null json marshal")
data, err = null.MarshalText()
maybePanic(err)
assertJSONEquals(t, data, "", "string marshal text")
} }
// Tests omitempty... broken until Go 1.4 // Tests omitempty... broken until Go 1.4