115 lines
2.7 KiB
Go
115 lines
2.7 KiB
Go
package packngo
|
|
|
|
const planBasePath = "/plans"
|
|
|
|
// PlanService interface defines available plan methods
|
|
type PlanService interface {
|
|
List() ([]Plan, *Response, error)
|
|
}
|
|
|
|
type planRoot struct {
|
|
Plans []Plan `json:"plans"`
|
|
}
|
|
|
|
// Plan represents a Packet service plan
|
|
type Plan struct {
|
|
ID string `json:"id"`
|
|
Slug string `json:"slug,omitempty"`
|
|
Name string `json:"name,omitempty"`
|
|
Description string `json:"description,omitempty"`
|
|
Line string `json:"line,omitempty"`
|
|
Specs *Specs `json:"specs,omitempty"`
|
|
Pricing *Pricing `json:"pricing,omitempty"`
|
|
}
|
|
func (p Plan) String() string {
|
|
return Stringify(p)
|
|
}
|
|
|
|
// Specs - the server specs for a plan
|
|
type Specs struct {
|
|
Cpus []*Cpus `json:"cpus,omitempty"`
|
|
Memory *Memory `json:"memory,omitempty"`
|
|
Drives []*Drives `json:"drives,omitempty"`
|
|
Nics []*Nics `json:"nics,omitempty"`
|
|
Features *Features `json:"features,omitempty"`
|
|
}
|
|
func (s Specs) String() string {
|
|
return Stringify(s)
|
|
}
|
|
|
|
// Cpus - the CPU config details for specs on a plan
|
|
type Cpus struct {
|
|
Count int `json:"count,omitempty"`
|
|
Type string `json:"type,omitempty"`
|
|
}
|
|
func (c Cpus) String() string {
|
|
return Stringify(c)
|
|
}
|
|
|
|
// Memory - the RAM config details for specs on a plan
|
|
type Memory struct {
|
|
Total string `json:"total,omitempty"`
|
|
}
|
|
func (m Memory) String() string {
|
|
return Stringify(m)
|
|
}
|
|
|
|
// Drives - the storage config details for specs on a plan
|
|
type Drives struct {
|
|
Count int `json:"count,omitempty"`
|
|
Size string `json:"size,omitempty"`
|
|
Type string `json:"type,omitempty"`
|
|
}
|
|
func (d Drives) String() string {
|
|
return Stringify(d)
|
|
}
|
|
|
|
// Nics - the network hardware details for specs on a plan
|
|
type Nics struct {
|
|
Count int `json:"count,omitempty"`
|
|
Type string `json:"type,omitempty"`
|
|
}
|
|
func (n Nics) String() string {
|
|
return Stringify(n)
|
|
}
|
|
|
|
// Features - other features in the specs for a plan
|
|
type Features struct {
|
|
Raid bool `json:"raid,omitempty"`
|
|
Txt bool `json:"txt,omitempty"`
|
|
}
|
|
func (f Features) String() string {
|
|
return Stringify(f)
|
|
}
|
|
|
|
// Pricing - the pricing options on a plan
|
|
type Pricing struct {
|
|
Hourly float32 `json:"hourly,omitempty"`
|
|
Monthly float32 `json:"monthly,omitempty"`
|
|
}
|
|
func (p Pricing) String() string {
|
|
return Stringify(p)
|
|
}
|
|
|
|
// PlanServiceOp implements PlanService
|
|
type PlanServiceOp struct {
|
|
client *Client
|
|
}
|
|
|
|
// List method returns all available plans
|
|
func (s *PlanServiceOp) List() ([]Plan, *Response, error) {
|
|
req, err := s.client.NewRequest("GET", planBasePath, nil)
|
|
|
|
if err != nil {
|
|
return nil, nil, err
|
|
}
|
|
|
|
root := new(planRoot)
|
|
resp, err := s.client.Do(req, root)
|
|
if err != nil {
|
|
return nil, resp, err
|
|
}
|
|
|
|
return root.Plans, resp, err
|
|
}
|