terraform/vendor/github.com/sethvargo/go-fastly/billing.go

82 lines
2.6 KiB
Go

package fastly
import (
"fmt"
"time"
)
// Billing is the top-level representation of a billing response from the Fastly
// API.
type Billing struct {
InvoiceID string `mapstructure:"invoice_id"`
StartTime *time.Time `mapstructure:"start_time"`
EndTime *time.Time `mapstructure:"end_time"`
Status *BillingStatus `mapstructure:"status"`
Total *BillingTotal `mapstructure:"total"`
}
// BillingStatus is a representation of the status of the bill from the Fastly
// API.
type BillingStatus struct {
InvoiceID string `mapstructure:"invoice_id"`
Status string `mapstructure:"status"`
SentAt *time.Time `mapstructure:"sent_at"`
}
// BillingTotal is a repsentation of the status of the usage for this bill from
// the Fastly API.
type BillingTotal struct {
PlanName string `mapstructure:"plan_name"`
PlanCode string `mapstructure:"plan_code"`
PlanMinimum string `mapstructure:"plan_minimum"`
Bandwidth float64 `mapstructure:"bandwidth"`
BandwidthCost float64 `mapstructure:"bandwidth_cost"`
Requests uint64 `mapstructure:"requests"`
RequestsCost float64 `mapstructure:"requests_cost"`
IncurredCost float64 `mapstructure:"incurred_cost"`
Overage float64 `mapstructure:"overage"`
Extras []*BillingExtra `mapstructure:"extras"`
ExtrasCost float64 `mapstructure:"extras_cost"`
CostBeforeDiscount float64 `mapstructure:"cost_before_discount"`
Discount float64 `mapstructure:"discount"`
Cost float64 `mapstructure:"cost"`
Terms string `mapstructure:"terms"`
}
// BillingExtra is a representation of extras (such as SSL addons) from the
// Fastly API.
type BillingExtra struct {
Name string `mapstructure:"name"`
Setup float64 `mapstructure:"setup"`
Recurring float64 `mapstructure:"recurring"`
}
// GetBillingInput is used as input to the GetBilling function.
type GetBillingInput struct {
Year uint16
Month uint8
}
// GetBilling returns the billing information for the current account.
func (c *Client) GetBilling(i *GetBillingInput) (*Billing, error) {
if i.Year == 0 {
return nil, ErrMissingYear
}
if i.Month == 0 {
return nil, ErrMissingMonth
}
path := fmt.Sprintf("/billing/year/%d/month/%02d", i.Year, i.Month)
resp, err := c.Get(path, nil)
if err != nil {
return nil, err
}
var b *Billing
if err := decodeJSON(&b, resp.Body); err != nil {
return nil, err
}
return b, nil
}