11package pbmodel
22
33import (
4+ "fmt"
45 "net"
56 "net/netip"
67
@@ -16,11 +17,23 @@ func AddrFromNetip(addr netip.Addr) *Addr {
1617 return & Addr {V4 : v4 [:]}
1718}
1819
19- func (a * Addr ) AsNetip () netip.Addr {
20+ func (a * Addr ) AsNetip () (netip.Addr , error ) {
21+ if a == nil {
22+ return netip.Addr {}, fmt .Errorf ("parse addr: nil" )
23+ }
2024 if len (a .V6 ) > 0 {
21- return netip .AddrFrom16 ([16 ]byte (a .V6 ))
25+ if len (a .V6 ) != 16 {
26+ return netip.Addr {}, fmt .Errorf ("parse addr: v6 length is %d, want 16" , len (a .V6 ))
27+ }
28+ return netip .AddrFrom16 ([16 ]byte (a .V6 )), nil
29+ }
30+ if len (a .V4 ) == 0 {
31+ return netip.Addr {}, fmt .Errorf ("parse addr: v4 and v6 both empty" )
2232 }
23- return netip .AddrFrom4 ([4 ]byte (a .V4 ))
33+ if len (a .V4 ) != 4 {
34+ return netip.Addr {}, fmt .Errorf ("parse addr: v4 length is %d, want 4" , len (a .V4 ))
35+ }
36+ return netip .AddrFrom4 ([4 ]byte (a .V4 )), nil
2437}
2538
2639func AddrPortFromNet (addr net.Addr ) (* AddrPort , error ) {
@@ -38,16 +51,30 @@ func AddrPortFromNetip(addr netip.AddrPort) *AddrPort {
3851 }
3952}
4053
41- func (a * AddrPort ) AsNetip () netip.AddrPort {
42- return netip .AddrPortFrom (a .Addr .AsNetip (), uint16 (a .Port ))
54+ func (a * AddrPort ) AsNetip () (netip.AddrPort , error ) {
55+ if a == nil {
56+ return netip.AddrPort {}, fmt .Errorf ("parse addrport: nil" )
57+ }
58+ if a .Addr == nil {
59+ return netip.AddrPort {}, fmt .Errorf ("parse addrport: missing addr" )
60+ }
61+ addr , err := a .Addr .AsNetip ()
62+ if err != nil {
63+ return netip.AddrPort {}, err
64+ }
65+ return netip .AddrPortFrom (addr , uint16 (a .Port )), nil
4366}
4467
45- func AsNetips (pb []* AddrPort ) []netip.AddrPort {
68+ func AsNetips (pb []* AddrPort ) ([]netip.AddrPort , error ) {
69+ var err error
4670 s := make ([]netip.AddrPort , len (pb ))
4771 for i , pbi := range pb {
48- s [i ] = pbi .AsNetip ()
72+ s [i ], err = pbi .AsNetip ()
73+ if err != nil {
74+ return nil , err
75+ }
4976 }
50- return s
77+ return s , nil
5178}
5279
5380func AsAddrPorts (addrs []netip.AddrPort ) []* AddrPort {
0 commit comments