From 2a69d5a470b272bb91735aa75fabd03b10dab259 Mon Sep 17 00:00:00 2001 From: Felix Lange Date: Tue, 4 Apr 2017 02:07:21 +0200 Subject: [PATCH] p2p/netutil: make Netlist decodable from TOML --- p2p/netutil/net.go | 25 +++++++++++++++++++++++++ 1 file changed, 25 insertions(+) diff --git a/p2p/netutil/net.go b/p2p/netutil/net.go index 3c3715788d..f6005afd21 100644 --- a/p2p/netutil/net.go +++ b/p2p/netutil/net.go @@ -84,6 +84,31 @@ func ParseNetlist(s string) (*Netlist, error) { return &l, nil } +// MarshalTOML implements toml.MarshalerRec. +func (l Netlist) MarshalTOML() interface{} { + list := make([]string, 0, len(l)) + for _, net := range l { + list = append(list, net.String()) + } + return list +} + +// UnmarshalTOML implements toml.UnmarshalerRec. +func (l *Netlist) UnmarshalTOML(fn func(interface{}) error) error { + var masks []string + if err := fn(&masks); err != nil { + return err + } + for _, mask := range masks { + _, n, err := net.ParseCIDR(mask) + if err != nil { + return err + } + *l = append(*l, *n) + } + return nil +} + // Add parses a CIDR mask and appends it to the list. It panics for invalid masks and is // intended to be used for setting up static lists. func (l *Netlist) Add(cidr string) {