1package api
2
3import (
4	"encoding/json"
5	"fmt"
6	"net/http"
7	"net/url"
8)
9
10// ContainerData represents a  container data (S3)
11type ContainerData struct {
12	LastModified string `json:"last_modified"`
13	Name         string `json:"name"`
14	Size         string `json:"size"`
15}
16
17type getContainerDatas struct {
18	Container []*ContainerData `json:"container"`
19}
20
21// Container represents a  container (S3)
22type Container struct {
23	Organization `json:"organization"`
24	Name         string `json:"name"`
25	Size         string `json:"size"`
26}
27
28type getContainers struct {
29	Containers []*Container `json:"containers"`
30}
31
32// GetContainers returns a GetContainers
33func (s *API) GetContainers() ([]*Container, error) {
34	resp, err := s.GetResponsePaginate(s.computeAPI, "containers", url.Values{})
35	if err != nil {
36		return nil, err
37	}
38	defer resp.Body.Close()
39
40	body, err := s.handleHTTPError([]int{http.StatusOK}, resp)
41	if err != nil {
42		return nil, err
43	}
44	var containers getContainers
45
46	if err = json.Unmarshal(body, &containers); err != nil {
47		return nil, err
48	}
49	return containers.Containers, nil
50}
51
52// GetContainerDatas returns a GetContainerDatas
53func (s *API) GetContainerDatas(container string) ([]*ContainerData, error) {
54	resp, err := s.GetResponsePaginate(s.computeAPI, fmt.Sprintf("containers/%s", container), url.Values{})
55	if err != nil {
56		return nil, err
57	}
58	defer resp.Body.Close()
59
60	body, err := s.handleHTTPError([]int{http.StatusOK}, resp)
61	if err != nil {
62		return nil, err
63	}
64	var datas getContainerDatas
65
66	if err = json.Unmarshal(body, &datas); err != nil {
67		return nil, err
68	}
69	return datas.Container, nil
70}
71