github.com/status-im/status-go@v1.1.0/cmd/statusd/topics/topics.go (about) 1 package topics 2 3 import ( 4 "errors" 5 "strconv" 6 "strings" 7 8 "github.com/ethereum/go-ethereum/p2p/discv5" 9 10 "github.com/status-im/status-go/params" 11 ) 12 13 // TopicFlag used to parse discv5 topics. 14 type TopicFlag []discv5.Topic 15 16 func (f *TopicFlag) String() string { 17 return "discv5 topics" 18 } 19 20 // Set parses single topic. 21 func (f *TopicFlag) Set(value string) error { 22 *f = append(*f, discv5.Topic(strings.TrimSpace(value))) 23 return nil 24 } 25 26 // TopicLimitsFlag used to parse limits for discv5 topics. 27 type TopicLimitsFlag map[discv5.Topic]params.Limits 28 29 func (f *TopicLimitsFlag) String() string { 30 return "disv5 topics to limits map" 31 } 32 33 // Set parses single limit for a topic. 34 func (f *TopicLimitsFlag) Set(value string) error { 35 parts := strings.Split(strings.TrimSpace(value), "=") 36 if len(parts) != 2 { 37 return errors.New("topic must be separated by '=' from limits, e.g. 'topic1=1,1'") 38 } 39 limits := strings.Split(parts[1], ",") 40 if len(limits) != 2 { 41 return errors.New("min and max limit must be set, e.g. 'topic1=1,1'") 42 } 43 minL, err := strconv.Atoi(limits[0]) 44 if err != nil { 45 return err 46 } 47 maxL, err := strconv.Atoi(limits[1]) 48 if err != nil { 49 return err 50 } 51 (*f)[discv5.Topic(parts[0])] = params.NewLimits(minL, maxL) 52 return nil 53 }