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"
|
|
|
|
|
)
|
|
|
|
|
|
2020-05-31 15:07:54 +00:00
|
|
|
// 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"`
|
|
|
|
|
}
|
|
|
|
|
|
2020-05-31 15:07:54 +00:00
|
|
|
// 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)
|
2020-05-31 15:07:54 +00:00
|
|
|
input["segment"] = condition
|
2020-05-27 00:53:05 +00:00
|
|
|
|
2020-05-31 15:07:54 +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 {
|
2020-05-31 15:07:54 +00:00
|
|
|
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 {
|
2020-05-31 15:07:54 +00:00
|
|
|
return &segmentMembers, errors.Wrap(err, "error decoding into `GetSegmentMembersResponse`")
|
2020-05-27 00:53:05 +00:00
|
|
|
}
|
|
|
|
|
|
2020-05-31 15:07:54 +00:00
|
|
|
return &segmentMembers, nil
|
2020-05-27 00:53:05 +00:00
|
|
|
}
|
|
|
|
|
|
2020-05-31 15:07:54 +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
|
|
|
}
|
|
|
|
|
|
2020-05-31 15:07:54 +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{})
|
2020-05-31 15:07:54 +00:00
|
|
|
input["segment"] = condition
|
2020-05-27 00:53:05 +00:00
|
|
|
input["members"] = members
|
|
|
|
|
|
2020-05-31 15:07:54 +00:00
|
|
|
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 {
|
2020-05-31 15:07:54 +00:00
|
|
|
return &intersectResponse, errors.Wrap(err, "error decoding into `IntersectMembersToSegmentResponse`")
|
2020-05-27 00:53:05 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return &intersectResponse, nil
|
|
|
|
|
}
|