From d70a888b56ea4107134f06cb8c4cb366afa0db14 Mon Sep 17 00:00:00 2001 From: Samuel Lorch Date: Fri, 3 Mar 2023 11:28:38 +0100 Subject: [PATCH] Add Custom IPNet Json Marshaling --- pkg/definitions/address.go | 3 +-- pkg/definitions/ipnet.go | 30 ++++++++++++++++++++++++++++++ 2 files changed, 31 insertions(+), 2 deletions(-) create mode 100644 pkg/definitions/ipnet.go diff --git a/pkg/definitions/address.go b/pkg/definitions/address.go index 27f947a..d5be589 100644 --- a/pkg/definitions/address.go +++ b/pkg/definitions/address.go @@ -2,7 +2,6 @@ package definitions import ( "encoding/json" - "net" "net/netip" "go4.org/netipx" @@ -13,7 +12,7 @@ type Address struct { Comment string `json:"comment,omitempty"` Host *netip.Addr `json:"host,omitempty"` Range *netipx.IPRange `json:"range,omitempty"` - Network *net.IPNet `json:"network,omitempty"` + Network *IPNet `json:"network,omitempty"` Children *[]string `json:"children,omitempty"` } diff --git a/pkg/definitions/ipnet.go b/pkg/definitions/ipnet.go new file mode 100644 index 0000000..bb65494 --- /dev/null +++ b/pkg/definitions/ipnet.go @@ -0,0 +1,30 @@ +package definitions + +import ( + "encoding/json" + "net" +) + +type IPNet struct { + net.IPNet +} + +// MarshalJSON for IPNet +func (i IPNet) MarshalJSON() ([]byte, error) { + return json.Marshal(i.String()) +} + +// UnmarshalJSON for IPNet +func (i *IPNet) UnmarshalJSON(b []byte) error { + var s string + if err := json.Unmarshal(b, &s); err != nil { + return err + } + + _, ipnet, err := net.ParseCIDR(s) + if err != nil { + return err + } + i.IPNet = *ipnet + return nil +}