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  }