1 /* Helper methods for dealing with responses from API Server. */
7 "git.curoverse.com/arvados.git/sdk/go/arvadosclient"
11 type SdkListResponse interface {
12 NumItemsAvailable() (int, error)
13 NumItemsContained() (int, error)
16 type UnstructuredSdkListResponse map[string]interface{}
18 func (m UnstructuredSdkListResponse) NumItemsAvailable() (numAvailable int, err error) {
19 if itemsAvailable, ok := m["items_available"]; !ok {
20 err = errors.New("Could not find \"items_available\" field in " +
21 "UnstructuredSdkListResponse that NumItemsAvailable was called on.")
23 // TODO(misha): Check whether this assertion will work before casting
24 numAvailable = int(itemsAvailable.(float64))
29 func (m UnstructuredSdkListResponse) NumItemsContained() (numContained int, err error) {
30 if value, ok := m["items"]; ok {
31 // TODO(misha): check whether this assertion will work before casting
32 numContained = len(value.([]interface{}))
34 err = errors.New(`Could not find "items" field in ` +
35 "UnstructuredSdkListResponse that NumItemsContained was called on.")
40 func UserIsAdmin(arv arvadosclient.ArvadosClient) (is_admin bool, err error) {
42 IsAdmin bool `json:"is_admin"`
45 err = arv.Call("GET", "users", "", "current", nil, &u)
49 // TODO(misha): Consider returning an error here instead of fatal'ing
50 func ContainsAllAvailableItems(response SdkListResponse) (containsAll bool, numContained int, numAvailable int) {
52 numContained, err = response.NumItemsContained()
54 log.Fatalf("Error retrieving number of items contained in SDK response: %v",
57 numAvailable, err = response.NumItemsAvailable()
59 log.Fatalf("Error retrieving number of items available from " +
63 containsAll = numContained == numAvailable
67 func IterateSdkListItems(response map[string]interface{}) (c <-chan map[string]interface{}, err error) {
68 if value, ok := response["items"]; ok {
69 ch := make(chan map[string]interface{})
71 items := value.([]interface{})
73 for _, item := range items {
74 ch <- item.(map[string]interface{})
79 err = errors.New("Could not find \"items\" field in response " +
80 "passed to IterateSdkListItems()")