From 63956695784068760fb148d3b849eb2d3416e61f Mon Sep 17 00:00:00 2001 From: Yair Slobodin Date: Tue, 22 Oct 2024 11:30:09 +0300 Subject: [PATCH 1/2] added AsCidr method --- pkg/netset/ipblock.go | 10 ++++++++++ pkg/netset/ipblock_test.go | 9 +++++++++ 2 files changed, 19 insertions(+) diff --git a/pkg/netset/ipblock.go b/pkg/netset/ipblock.go index 1dcb173..ab2774c 100644 --- a/pkg/netset/ipblock.go +++ b/pkg/netset/ipblock.go @@ -327,6 +327,16 @@ func cidrToInterval(cidr string) (interval.Interval, error) { return interval.New(int64(startNum), int64(endNum)), nil } +// if this ipb contains exactly one cidr AsCidr returns its string +// otherwise it returns an error +func (b *IPBlock) AsCidr() (string, error) { + cidrList := b.ToCidrList() + if len(cidrList) != 1 { + return "", fmt.Errorf("ipblock contains %d cidrs", len(cidrList)) + } + return cidrList[0], nil +} + // ToCidrList returns a list of CIDR strings for this IPBlock object func (b *IPBlock) ToCidrList() []string { var cidrList []string diff --git a/pkg/netset/ipblock_test.go b/pkg/netset/ipblock_test.go index 83af0ce..4763fb8 100644 --- a/pkg/netset/ipblock_test.go +++ b/pkg/netset/ipblock_test.go @@ -100,6 +100,15 @@ func TestConversions(t *testing.T) { require.Equal(t, ipRange, toPrint[0]) require.Equal(t, "", ipb1.ToIPAddressString()) + + _, err = ipb1.AsCidr() + require.NotNil(t, err) + + cidr := "5.2.1.0/24" + ipb3, _ := netset.IPBlockFromCidr(cidr) + str, err := ipb3.AsCidr() + require.Nil(t, err) + require.Equal(t, str, cidr) } func TestDisjointIPBlocks(t *testing.T) { From 5de642a433bad53fe4c1ea4239bddab2e5478f21 Mon Sep 17 00:00:00 2001 From: Yair Slobodin Date: Tue, 22 Oct 2024 12:32:16 +0300 Subject: [PATCH 2/2] fixed doc --- pkg/netset/ipblock.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pkg/netset/ipblock.go b/pkg/netset/ipblock.go index ab2774c..164a336 100644 --- a/pkg/netset/ipblock.go +++ b/pkg/netset/ipblock.go @@ -327,7 +327,7 @@ func cidrToInterval(cidr string) (interval.Interval, error) { return interval.New(int64(startNum), int64(endNum)), nil } -// if this ipb contains exactly one cidr AsCidr returns its string +// AsCidr returns the CIDR string of this IPBlock object, if it contains exactly one CIDR, // otherwise it returns an error func (b *IPBlock) AsCidr() (string, error) { cidrList := b.ToCidrList()