package goctk import ( "encoding/json" "fmt" "strings" ) type ( // Datacenter is the CORE representation of a Rackspace DC Datacenter struct { ID int `json:"id"` City string `json:"city"` Name string `json:"name"` Symbol string `json:"symbol"` State string `json:"state"` Street string `json:"street"` Timezone string `json:"timezone.name"` Currency string `json:"currency"` Country string `json:"country"` } ) // ClassNetworkDatacenter is a reusable string for the class queries const ClassNetworkDatacenter = "Network.Datacenter" func (c *Client) NetworkDatacenter(symbol string) ([]Datacenter, error) { query := map[string]interface{}{ "class": ClassNetworkDatacenter, "load_arg": map[string]string{ "symbol": strings.ToUpper(symbol), }, "load_method": "loadList", "attributes": []string{ "name", "city", "state", "street", "country", "currency", "symbol", "timezone.name", "id", }, } js, err := json.Marshal(query) if err != nil { return nil, err } res, err := c.Query(js) if err != nil { return nil, fmt.Errorf("NetworkDatacenter:Query:%s", err) } var ( r1 coreResponse r2 = make([]Datacenter, 0) ) if err = json.Unmarshal(res, &r1); err != nil { return nil, fmt.Errorf("json.Unmarshal:coreResponse:%s", err) } if len(r1) != 1 { return nil, fmt.Errorf("coreResponse.Result.Length:%v", r1) } for _, rawMsg := range r1[0].Result { var dec Datacenter if err = json.Unmarshal(rawMsg, &dec); err != nil { return nil, fmt.Errorf("json.Unmarshal:Datacenter:%s", err) } r2 = append(r2, dec) } return r2, nil }