diff --git a/types/date.go b/types/date.go index 155751a..393dbda 100644 --- a/types/date.go +++ b/types/date.go @@ -33,6 +33,10 @@ func (d Date) String() string { return d.Format(DateFormat) } +func (d Date) MarshalText() ([]byte, error) { + return []byte(d.Format(DateFormat)), nil +} + func (d *Date) UnmarshalText(data []byte) error { parsed, err := time.Parse(DateFormat, string(data)) if err != nil { diff --git a/types/date_test.go b/types/date_test.go index 2117765..2f927f0 100644 --- a/types/date_test.go +++ b/types/date_test.go @@ -2,6 +2,7 @@ package types import ( "encoding/json" + "encoding/xml" "fmt" "testing" "time" @@ -53,6 +54,46 @@ func TestDate_Stringer(t *testing.T) { }) } +func TestDate_MarshalText(t *testing.T) { + date := Date{Time: time.Date(2022, 6, 14, 0, 0, 0, 0, time.UTC)} + + value, err := date.MarshalText() + + assert.NoError(t, err) + assert.Equal(t, "2022-06-14", string(value)) +} + +func TestDate_TextRoundTrip(t *testing.T) { + testDate := time.Date(2022, 6, 14, 0, 0, 0, 0, time.UTC) + + value, err := Date{Time: testDate}.MarshalText() + assert.NoError(t, err) + + date := Date{} + err = date.UnmarshalText(value) + + assert.NoError(t, err) + assert.Equal(t, testDate, date.Time) +} + +func TestDate_XMLRoundTrip(t *testing.T) { + testDate := time.Date(2019, 4, 1, 0, 0, 0, 0, time.UTC) + type body struct { + XMLName xml.Name `xml:"body"` + DateField Date `xml:"date"` + } + + xmlBytes, err := xml.Marshal(body{DateField: Date{testDate}}) + assert.NoError(t, err) + assert.Equal(t, `