flip-rpc-client-go/segment.go

62 lines
2.0 KiB
Go
Raw Permalink Normal View History

2020-05-27 00:53:05 +00:00
package flip
import (
2020-05-31 15:59:56 +00:00
"github.com/FlipsideCrypto/flip-rpc-client-go/segment"
2020-05-27 00:53:05 +00:00
"github.com/mitchellh/mapstructure"
"github.com/pkg/errors"
)
// GetSegmentMembersResponse returns the RPC response
type GetSegmentMembersResponse struct {
2020-05-27 00:53:05 +00:00
Members []string `mapstructure:"members"`
MemberCount int `mapstructure:"member_count"`
}
// GetSegmentMembers returns the members belonging to the result set of a condition.
2020-05-31 15:59:56 +00:00
func (c Client) GetSegmentMembers(condition segment.Condition) (*GetSegmentMembersResponse, error) {
var input = make(map[string]segment.Condition)
input["segment"] = condition
2020-05-27 00:53:05 +00:00
var segmentMembers GetSegmentMembersResponse
2020-05-27 00:53:05 +00:00
2020-06-19 17:35:42 +00:00
rpc, err := c.CallRPC("RPCService.GetSegmentMembers", input)
2020-05-27 00:53:05 +00:00
if err != nil {
return &segmentMembers, err
2020-05-27 00:53:05 +00:00
}
2020-06-19 17:35:42 +00:00
err = mapstructure.Decode(rpc.Result, &segmentMembers)
2020-05-27 00:53:05 +00:00
if err != nil {
return &segmentMembers, errors.Wrap(err, "error decoding into `GetSegmentMembersResponse`")
2020-05-27 00:53:05 +00:00
}
return &segmentMembers, nil
2020-05-27 00:53:05 +00:00
}
// IntersectMembersToSegmentResponse returns the RPC response
type IntersectMembersToSegmentResponse struct {
SegmentMemberCount int `mapstructure:"segment_member_count"`
Matches []string `mapstructure:"matches"`
MatchCount int `mapstructure:"match_count"`
2020-05-27 00:53:05 +00:00
}
// IntersectMembersToSegment returns the intersection between a set of inputs against a segment formed by conditions
2020-05-31 15:59:56 +00:00
func (c Client) IntersectMembersToSegment(members []string, condition segment.Condition) (*IntersectMembersToSegmentResponse, error) {
2020-05-27 00:53:05 +00:00
var input = make(map[string]interface{})
input["segment"] = condition
2020-05-27 00:53:05 +00:00
input["members"] = members
var intersectResponse IntersectMembersToSegmentResponse
2020-05-27 00:53:05 +00:00
2020-06-19 17:35:42 +00:00
rpc, err := c.CallRPC("RPCService.IntersectMembersToSegment", input)
2020-05-27 00:53:05 +00:00
if err != nil {
return &intersectResponse, err
}
2020-06-19 17:35:42 +00:00
err = mapstructure.Decode(rpc.Result, &intersectResponse)
2020-05-27 00:53:05 +00:00
if err != nil {
return &intersectResponse, errors.Wrap(err, "error decoding into `IntersectMembersToSegmentResponse`")
2020-05-27 00:53:05 +00:00
}
return &intersectResponse, nil
}