Skip to content

Commit

Permalink
Support Inet to encoding.TextUnmarshaler
Browse files Browse the repository at this point in the history
  • Loading branch information
scop authored and jackc committed Jul 30, 2022
1 parent 20ff3fe commit 4dde7be
Show file tree
Hide file tree
Showing 2 changed files with 19 additions and 0 deletions.
6 changes: 6 additions & 0 deletions inet.go
Expand Up @@ -158,6 +158,12 @@ func (src *Inet) AssignTo(dst interface{}) error {
copy(*v, src.IPNet.IP)
return nil
default:
if tv, ok := dst.(encoding.TextUnmarshaler); ok {
if err := tv.UnmarshalText([]byte(src.IPNet.String())); err != nil {
return fmt.Errorf("cannot unmarshal %v to %T: %w", src, dst, err)
}
return nil
}
if nextDst, retry := GetAssignToDstType(dst); retry {
return src.AssignTo(nextDst)
}
Expand Down
13 changes: 13 additions & 0 deletions inet_test.go
Expand Up @@ -93,11 +93,22 @@ func TestInetSet(t *testing.T) {
}
}

type textUnmarshaler struct {
Text string
}

func (u *textUnmarshaler) UnmarshalText(text []byte) error {
u.Text = string(text)
return nil
}

func TestInetAssignTo(t *testing.T) {
var ipnet net.IPNet
var pipnet *net.IPNet
var ip net.IP
var pip *net.IP
var um textUnmarshaler
var pum *textUnmarshaler

simpleTests := []struct {
src pgtype.Inet
Expand All @@ -106,8 +117,10 @@ func TestInetAssignTo(t *testing.T) {
}{
{src: pgtype.Inet{IPNet: mustParseCIDR(t, "127.0.0.1/32"), Status: pgtype.Present}, dst: &ipnet, expected: *mustParseCIDR(t, "127.0.0.1/32")},
{src: pgtype.Inet{IPNet: mustParseCIDR(t, "127.0.0.1/32"), Status: pgtype.Present}, dst: &ip, expected: mustParseCIDR(t, "127.0.0.1/32").IP},
{src: pgtype.Inet{IPNet: mustParseCIDR(t, "127.0.0.1/32"), Status: pgtype.Present}, dst: &um, expected: textUnmarshaler{"127.0.0.1/32"}},
{src: pgtype.Inet{Status: pgtype.Null}, dst: &pipnet, expected: ((*net.IPNet)(nil))},
{src: pgtype.Inet{Status: pgtype.Null}, dst: &pip, expected: ((*net.IP)(nil))},
{src: pgtype.Inet{Status: pgtype.Null}, dst: &pum, expected: ((*textUnmarshaler)(nil))},
}

for i, tt := range simpleTests {
Expand Down

0 comments on commit 4dde7be

Please sign in to comment.