traefik/vendor/github.com/weppos/dnsimple-go/dnsimple/contacts.go
2017-03-09 13:13:02 +01:00

121 lines
3.4 KiB
Go

package dnsimple
import (
"fmt"
"time"
)
// ContactsService handles communication with the contact related
// methods of the DNSimple API.
//
// DNSimple API docs: http://developer.dnsimple.com/contacts/
type ContactsService struct {
client *Client
}
type Contact struct {
Id int `json:"id,omitempty"`
Label string `json:"label,omitempty"`
FirstName string `json:"first_name,omitempty"`
LastName string `json:"last_name,omitempty"`
JobTitle string `json:"job_title,omitempty"`
Organization string `json:"organization_name,omitempty"`
Email string `json:"email_address,omitempty"`
Phone string `json:"phone,omitempty"`
Fax string `json:"fax,omitempty"`
Address1 string `json:"address1,omitempty"`
Address2 string `json:"address2,omitempty"`
City string `json:"city,omitempty"`
Zip string `json:"postal_code,omitempty"`
Country string `json:"country,omitempty"`
CreatedAt *time.Time `json:"created_at,omitempty"`
UpdatedAt *time.Time `json:"updated_at,omitempty"`
}
type contactWrapper struct {
Contact Contact `json:"contact"`
}
// contactPath generates the resource path for given contact.
func contactPath(contact interface{}) string {
if contact != nil {
return fmt.Sprintf("contacts/%d", contact)
}
return "contacts"
}
// List the contacts.
//
// DNSimple API docs: http://developer.dnsimple.com/contacts/#list
func (s *ContactsService) List() ([]Contact, *Response, error) {
path := contactPath(nil)
wrappedContacts := []contactWrapper{}
res, err := s.client.get(path, &wrappedContacts)
if err != nil {
return []Contact{}, res, err
}
contacts := []Contact{}
for _, contact := range wrappedContacts {
contacts = append(contacts, contact.Contact)
}
return contacts, res, nil
}
// Create a new contact.
//
// DNSimple API docs: http://developer.dnsimple.com/contacts/#create
func (s *ContactsService) Create(contactAttributes Contact) (Contact, *Response, error) {
path := contactPath(nil)
wrappedContact := contactWrapper{Contact: contactAttributes}
returnedContact := contactWrapper{}
res, err := s.client.post(path, wrappedContact, &returnedContact)
if err != nil {
return Contact{}, res, err
}
return returnedContact.Contact, res, nil
}
// Get fetches a contact.
//
// DNSimple API docs: http://developer.dnsimple.com/contacts/#get
func (s *ContactsService) Get(contactID int) (Contact, *Response, error) {
path := contactPath(contactID)
wrappedContact := contactWrapper{}
res, err := s.client.get(path, &wrappedContact)
if err != nil {
return Contact{}, res, err
}
return wrappedContact.Contact, res, nil
}
// Update a contact.
//
// DNSimple API docs: http://developer.dnsimple.com/contacts/#update
func (s *ContactsService) Update(contactID int, contactAttributes Contact) (Contact, *Response, error) {
path := contactPath(contactID)
wrappedContact := contactWrapper{Contact: contactAttributes}
returnedContact := contactWrapper{}
res, err := s.client.put(path, wrappedContact, &returnedContact)
if err != nil {
return Contact{}, res, err
}
return returnedContact.Contact, res, nil
}
// Delete a contact.
//
// DNSimple API docs: http://developer.dnsimple.com/contacts/#delete
func (s *ContactsService) Delete(contactID int) (*Response, error) {
path := contactPath(contactID)
return s.client.delete(path, nil)
}