github.com/status-im/status-go@v1.1.0/services/peer/api.go (about)

     1  package peer
     2  
     3  import (
     4  	"context"
     5  	"errors"
     6  )
     7  
     8  var (
     9  	// ErrInvalidTopic error returned when the requested topic is not valid.
    10  	ErrInvalidTopic = errors.New("topic not valid")
    11  
    12  	// ErrInvalidRange error returned when max-min range is not valid.
    13  	ErrInvalidRange = errors.New("invalid range, Min should be lower or equal to Max")
    14  
    15  	// ErrDiscovererNotProvided error when discoverer is not being provided.
    16  	ErrDiscovererNotProvided = errors.New("discoverer not provided")
    17  )
    18  
    19  // PublicAPI represents a set of APIs from the `web3.peer` namespace.
    20  type PublicAPI struct {
    21  	s *Service
    22  }
    23  
    24  // NewAPI creates an instance of the peer API.
    25  func NewAPI(s *Service) *PublicAPI {
    26  	return &PublicAPI{s: s}
    27  }
    28  
    29  // DiscoverRequest json request for peer_discover.
    30  type DiscoverRequest struct {
    31  	Topic string `json:"topic"`
    32  	Max   int    `json:"max"`
    33  	Min   int    `json:"min"`
    34  }
    35  
    36  // Discover is an implementation of `peer_discover` or `web3.peer.discover` API.
    37  func (api *PublicAPI) Discover(context context.Context, req DiscoverRequest) (err error) {
    38  	if api.s.d == nil {
    39  		return ErrDiscovererNotProvided
    40  	}
    41  	if len(req.Topic) == 0 {
    42  		return ErrInvalidTopic
    43  	}
    44  	if req.Max < req.Min {
    45  		return ErrInvalidRange
    46  	}
    47  	return api.s.d.Discover(req.Topic, req.Max, req.Min)
    48  }