1package packngo
2
3const facilityBasePath = "/facilities"
4
5// FacilityService interface defines available facility methods
6type FacilityService interface {
7	List() ([]Facility, *Response, error)
8}
9
10type facilityRoot struct {
11	Facilities []Facility `json:"facilities"`
12}
13
14// Facility represents a Packet facility
15type Facility struct {
16	ID       string   `json:"id"`
17	Name     string   `json:"name,omitempty"`
18	Code     string   `json:"code,omitempty"`
19	Features []string `json:"features,omitempty"`
20	Address  *Address `json:"address,omitempty"`
21	URL      string   `json:"href,omitempty"`
22}
23
24func (f Facility) String() string {
25	return Stringify(f)
26}
27
28// Address - the physical address of the facility
29type Address struct {
30	ID string `json:"id,omitempty"`
31}
32
33func (a Address) String() string {
34	return Stringify(a)
35}
36
37// FacilityServiceOp implements FacilityService
38type FacilityServiceOp struct {
39	client *Client
40}
41
42// List returns all available Packet facilities
43func (s *FacilityServiceOp) List() ([]Facility, *Response, error) {
44	root := new(facilityRoot)
45
46	resp, err := s.client.DoRequest("GET", facilityBasePath, nil, root)
47	if err != nil {
48		return nil, resp, err
49	}
50
51	return root.Facilities, resp, err
52}
53