@@ -195,3 +195,65 @@ var MustParseIPAsIPNet = must(ParseIPAsIPNet)
195195
196196// MustParseAddrAsPrefix is like ParseAddrAsPrefix, but it panics on error instead of returning an error value.
197197var MustParseAddrAsPrefix = must (ParseAddrAsPrefix )
198+
199+ type listParser [T any ] func (... string ) ([]T , error )
200+
201+ func list [T any ](parse parser [T ]) listParser [T ] {
202+ return func (strs ... string ) ([]T , error ) {
203+ var err error
204+ ret := make ([]T , len (strs ))
205+ for i , str := range strs {
206+ ret [i ], err = parse (str )
207+ if err != nil {
208+ return nil , err
209+ }
210+ }
211+ return ret , nil
212+ }
213+ }
214+
215+ // ParseIPList parses a list of strings with ParseIP and returns a []net.IP or an error.
216+ var ParseIPList = list (ParseIP )
217+
218+ // ParseIPNetList parses a list of strings with ParseIPNet and returns a []*net.IPNet or an error.
219+ var ParseIPNetList = list (ParseIPNet )
220+
221+ // ParseAddrList parses a list of strings with ParseAddr and returns a []netip.Addr or an error.
222+ var ParseAddrList = list (ParseAddr )
223+
224+ // ParsePrefixList parses a list of strings with ParsePrefix and returns a []netip.Prefix or an error.
225+ var ParsePrefixList = list (ParsePrefix )
226+
227+ // ParseIPAsIPNetList parses a list of strings with ParseIPAsIPNet and returns a []*net.IPNet or an error.
228+ var ParseIPAsIPNetList = list (ParseIPAsIPNet )
229+
230+ // ParseAddrAsPrefixList parses a list of strings with ParseAddrAsPrefix and returns a []netip.Prefix or an error.
231+ var ParseAddrAsPrefixList = list (ParseAddrAsPrefix )
232+
233+ func mustlist [T any ](parse listParser [T ]) func (... string ) []T {
234+ return func (strs ... string ) []T {
235+ ret , err := parse (strs ... )
236+ if err != nil {
237+ panic (err )
238+ }
239+ return ret
240+ }
241+ }
242+
243+ // MustParseIPList parses a list of strings with ParseIP and returns a []net.IP or else panics on error.
244+ var MustParseIPList = mustlist (ParseIPList )
245+
246+ // MustParseIPNetList parses a list of strings with ParseIPNet and returns a []*net.IPNet or else panics on error.
247+ var MustParseIPNetList = mustlist (ParseIPNetList )
248+
249+ // MustParseAddrList parses a list of strings with ParseAddr and returns a []netip.Addr or else panics on error.
250+ var MustParseAddrList = mustlist (ParseAddrList )
251+
252+ // MustParsePrefixList parses a list of strings with ParsePrefix and returns a []netip.Prefix or else panics on error.
253+ var MustParsePrefixList = mustlist (ParsePrefixList )
254+
255+ // MustParseIPAsIPNetList parses a list of strings with ParseIPAsIPNet and returns a []*net.IPNet or else panics on error.
256+ var MustParseIPAsIPNetList = mustlist (ParseIPAsIPNetList )
257+
258+ // MustParseAddrAsPrefixList parses a list of strings with ParseAddrAsPrefix and returns a []netip.Prefix or else panics on error.
259+ var MustParseAddrAsPrefixList = mustlist (ParseAddrAsPrefixList )
0 commit comments