flip-rpc-client-go/segment.go
2020-06-19 13:38:55 -04:00

62 lines
2.0 KiB
Go

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