module Network.GoDaddy.DomainTypes ( Contact(Contact)
, Contacts(Contacts)
, AddressMailing(AddressMailing)
, DomainSummary(DomainSummary)
, DomainUpdate(DomainUpdate)
, PrivacyPurchase(PrivacyPurchase)
, DomainPurchaseResponse(DomainPurchaseResponse)
, DNSRecord(DNSRecord)
, DomainTransferIn(DomainTransferIn)
, LegalAgreement(LegalAgreement)
, DomainAvailableResponse(DomainAvailableResponse)
, IdentityDocumentCreate(IdentityDocumentCreate)
, Schema(Schema)
, SchemaDataType(SchemaDataType)
, SchemaProperties(SchemaProperties)
, DomainSuggestion(DomainSuggestion)
, TldSummary(TldSummary)
, DomainPurchase(DomainPurchase)
) where
import Data.Aeson
data Contact = Contact { nameFirst :: String
, nameMiddle :: Maybe String
, nameLast :: String
, organization :: Maybe String
, jobTitle :: Maybe String
, email :: String
, phone :: String
, fax :: Maybe String
, addressMailing :: AddressMailing } deriving (Show)
instance ToJSON Contact where
toJSON (Contact f m l o j e p fa a) =
object [ "nameFirst" .= f
, "nameMiddle" .= m
, "nameLast" .= l
, "organization" .= o
, "jobTitle" .= j
, "email" .= e
, "phone" .= p
, "fax" .= fa
, "addressMailing" .= a ]
instance FromJSON Contact where
parseJSON (Object v) =
Contact <$> v .: "nameFirst"
<*> v .:? "nameMiddle"
<*> v .: "nameLast"
<*> v .:? "organization"
<*> v .:? "jobTitle"
<*> v .: "email"
<*> v .: "phone"
<*> v .:? "fax"
<*> v .: "addressMailing"
parseJSON _ = fail "Contact object not found"
data Contacts = Contacts { registrant :: Contact
, admin :: Maybe Contact
, tech :: Maybe Contact
, billing :: Maybe Contact } deriving (Show)
instance ToJSON Contacts where
toJSON (Contacts r a t b) =
object [ "contactRegistrant" .= r
, "contactAdmin" .= a
, "contactTech" .= t
, "contactBilling" .= b ]
instance FromJSON Contacts where
parseJSON (Object v) =
Contacts <$> v .: "contactRegistrant"
<*> v .:? "contactAdmin"
<*> v .:? "contactTech"
<*> v .:? "contactBilling"
parseJSON _ = fail "Contacts object not found"
data AddressMailing = AddressMailing { address1 :: String
, address2 :: Maybe String
, city :: String
, state :: String
, postalCode :: String
, country :: String } deriving (Show)
instance ToJSON AddressMailing where
toJSON (AddressMailing a1 a2 c s p co) =
object [ "address1" .= a1
, "address2" .= a2
, "city" .= c
, "state" .= s
, "postalCode" .= p
, "country" .= co ]
instance FromJSON AddressMailing where
parseJSON (Object v) =
AddressMailing <$> v .: "address1"
<*> v .:? "address2"
<*> v .: "city"
<*> v .: "state"
<*> v .: "postalCode"
<*> v .: "country"
parseJSON _ = fail "AddressMailing object not found"
data RealNameValidation = RealNameValidation { r_status :: Maybe String } deriving (Show)
instance ToJSON RealNameValidation where
toJSON (RealNameValidation s) =
object [ "status" .= s ]
instance FromJSON RealNameValidation where
parseJSON (Object v) =
RealNameValidation <$> v .:? "status"
parseJSON _ = fail "RealNameValidation object not found"
data DomainSummary = DomainSummary { domainId :: Float
, domain :: String
, status :: String
, expires :: Maybe String
, expirationProtected :: Bool
, holdRegistar :: Bool
, locked :: Bool
, privacy :: Bool
, renewAuto :: Bool
, renewable :: Bool
, renewDeadline :: String
, transferProtected :: Bool
, createdAt :: String
, authCode :: Maybe String
, nameServers :: Maybe [String]
, contactRegistrant :: Maybe Contact
, contactBill :: Maybe Contact
, contactAdmin :: Maybe Contact
, contactTech :: Maybe Contact
, realNameValidation :: Maybe RealNameValidation
, subAccountId :: Maybe String} deriving (Show)
instance ToJSON DomainSummary where
toJSON (DomainSummary id d s e ep hr l p ra r rd tp ca ac ns cr cb cad ct rnv sai) =
object [ "domainId" .= id
, "domain" .= d
, "status" .= s
, "expires" .= e
, "expirationProtected" .= ep
, "holdRegistrar" .= hr
, "locked" .= l
, "privacy" .= p
, "renewAuto" .= ra
, "renewable" .= r
, "renewDeadline" .= rd
, "transferProtected" .= tp
, "createdAt" .= ca
, "authCode" .= ac
, "nameServers" .= ns
, "contactRegistrant" .= cr
, "contactBilling" .= cb
, "contactAdmin" .= cad
, "contactTech" .= ct
, "realNameValidation" .= rnv
, "subaccountId" .= sai]
instance FromJSON DomainSummary where
parseJSON (Object v) =
DomainSummary <$> v .: "domainId"
<*> v .: "domain"
<*> v .: "status"
<*> v .:? "expires"
<*> v .: "expirationProtected"
<*> v .: "holdRegistrar"
<*> v .: "locked"
<*> v .: "privacy"
<*> v .: "renewAuto"
<*> v .: "renewable"
<*> v .: "renewDeadline"
<*> v .: "transferProtected"
<*> v .: "createdAt"
<*> v .:? "authCode"
<*> v .:? "nameServers"
<*> v .:? "contactRegistrant"
<*> v .:? "contactBilling"
<*> v .:? "contactAdmin"
<*> v .:? "contactTech"
<*> v .:? "realNameValidation"
<*> v .:? "subaccountId"
parseJSON _ = fail "DomainSummary object not found"
data DomainUpdate = DomainUpdate { dlocked :: Maybe Bool
, dnameServers :: Maybe [String]
, drenewAuto :: Maybe Bool
, dsubaccountId :: Maybe String } deriving (Show)
instance ToJSON DomainUpdate where
toJSON (DomainUpdate l ns ra si) =
object [ "locked" .= l
, "nameServers" .= ns
, "renewAuto" .= ra
, "subaccountId" .= si ]
instance FromJSON DomainUpdate where
parseJSON (Object v) =
DomainUpdate <$> v .:? "locked"
<*> v .:? "nameServers"
<*> v .:? "renewAuto"
<*> v .:? "subaccountId"
parseJSON _ = fail "DomainUpdate object not found"
data Consent = Consent { agreementKeys :: [String]
, agreedBy :: String
, agreeAt :: String } deriving (Show)
instance ToJSON Consent where
toJSON (Consent ag ab aa) = object [ "agreementKeys" .= ag
, "agreedBy" .= ab
, "agreedAt" .= aa ]
instance FromJSON Consent where
parseJSON (Object v) =
Consent <$> v .: "agreementKeys"
<*> v .: "agreedBy"
<*> v .: "agreedAt"
parseJSON _ = fail "Consent object not found"
data PrivacyPurchase = PrivacyPurchase { consent :: Consent } deriving (Show)
instance ToJSON PrivacyPurchase where
toJSON (PrivacyPurchase c) = object [ "consent" .= c ]
instance FromJSON PrivacyPurchase where
parseJSON (Object v) =
PrivacyPurchase <$> v .: "consent"
parseJSON _ = fail "PrivacyPurchase object not found"
data DomainPurchaseResponse = DomainPurchaseResponse { orderId :: Integer
, itemCount :: Integer
, total :: Integer
, currency :: String } deriving (Show)
instance ToJSON DomainPurchaseResponse where
toJSON (DomainPurchaseResponse oi ic t c) =
object [ "orderId" .= oi
, "itemCount" .= ic
, "total" .= t
, "currency" .= c]
instance FromJSON DomainPurchaseResponse where
parseJSON (Object v) =
DomainPurchaseResponse <$> v .: "orderId"
<*> v .: "itemCount"
<*> v .: "total"
<*> v .: "currency"
parseJSON _ = fail "DomainPurchaseResponse object not found"
data DNSRecord = DNSRecord { recordType :: String
, recordName :: String
, recordData :: Maybe String
, recordPriority :: Maybe String
, recordTTL :: Maybe String
, recordService :: Maybe String
, recordProtocol :: Maybe String
, recordPort :: Maybe Integer
, recordWeight :: Maybe Integer } deriving (Show)
instance ToJSON DNSRecord where
toJSON (DNSRecord t n d p ttl s pr po w) =
object [ "type" .= t
, "name" .= n
, "data" .= d
, "priority" .= p
, "ttl" .= ttl
, "service" .= s
, "protocol" .= pr
, "port" .= po
, "weight" .= w ]
instance FromJSON DNSRecord where
parseJSON (Object v) =
DNSRecord <$> v .: "type"
<*> v .: "name"
<*> v .:? "data"
<*> v .:? "priority"
<*> v .:? "ttl"
<*> v .:? "service"
<*> v .:? "protocol"
<*> v .:? "port"
<*> v .:? "weight"
parseJSON _ = fail "DNSRecord object not found"
data DomainRenew = DomainRenew { period :: Integer } deriving (Show)
instance ToJSON DomainRenew where
toJSON (DomainRenew p) = object [ "period" .= p ]
instance FromJSON DomainRenew where
parseJSON (Object v) = DomainRenew <$> v .: "period"
data DomainTransferIn = DomainTransferIn { transAuthCode :: String
, transPeriod :: Maybe Integer
, transRenewAuto :: Maybe Bool
, transPrivacy :: Maybe Bool
, transConsent :: Consent } deriving (Show)
instance ToJSON DomainTransferIn where
toJSON (DomainTransferIn ac p ra pr c) =
object [ "authCode" .= ac
, "period" .= p
, "renewAuto" .= ra
, "privacy" .= pr
, "consent" .= c ]
instance FromJSON DomainTransferIn where
parseJSON (Object v) =
DomainTransferIn <$> v .: "authCode"
<*> v .:? "period"
<*> v .:? "renewAuto"
<*> v .:? "privacy"
<*> v .: "consent"
parseJSON _ = fail "DomainTransferIn object not found"
data LegalAgreement = LegalAgreement { agreementKey :: String
, title :: String
, url :: Maybe String
, content :: String } deriving (Show)
instance ToJSON LegalAgreement where
toJSON (LegalAgreement ak t u c) =
object [ "agreementKey" .= ak
, "title" .= t
, "url" .= u
, "content" .= c ]
instance FromJSON LegalAgreement where
parseJSON (Object v) =
LegalAgreement <$> v .: "agreementKey"
<*> v .: "title"
<*> v .:? "url"
<*> v .: "content"
parseJSON _ = fail "LegalAgreement object not found"
data DomainAvailableResponse = DomainAvailableResponse { availDomain :: String
, available :: Bool
, price :: Maybe Integer
, availCurrency :: Maybe String
, availPeriod :: Maybe Integer} deriving (Show)
instance ToJSON DomainAvailableResponse where
toJSON (DomainAvailableResponse av a p ac ap) =
object [ "domain" .= av
, "available" .= a
, "price" .= p
, "currency" .= ac
, "period" .= ap ]
instance FromJSON DomainAvailableResponse where
parseJSON (Object v) =
DomainAvailableResponse <$> v .: "domain"
<*> v .: "available"
<*> v .:? "price"
<*> v .:? "currency"
<*> v .:? "period"
parseJSON _ = fail "DomainAvailableResponse object not found"
data IdentityDocumentCreate = IdentityDocumentCreate { identificationType :: String
, identityDomain :: String
, legalEntityName :: String
, identificationNumber :: String
, image :: String
, identityConcent :: Consent } deriving (Show)
instance ToJSON IdentityDocumentCreate where
toJSON (IdentityDocumentCreate it id len idn i idc) =
object [ "identificationType" .= it
, "domain" .= id
, "legalEntityName" .= len
, "image" .= i
, "consent" .= idc ]
instance FromJSON IdentityDocumentCreate where
parseJSON (Object v) =
IdentityDocumentCreate <$> v .: "identificationType"
<*> v .: "domain"
<*> v .: "legalEntityName"
<*> v .: "identificationNumber"
<*> v .: "iamge"
<*> v .: "concent"
parseJSON _ = fail "IdentityDocumentCreate object not found"
data DomainPurchase = DomainPurchase { purchaseDomain :: String
, purchaseConsent :: Consent
, purchasePeriod :: Maybe Integer
, purchaseNameServers :: Maybe [String]
, purchaseRenewAuto :: Maybe Bool
, purchasePrivacy :: Maybe Bool
, purchaseRegistrant :: Maybe Contact
, purchaseAdmin :: Maybe Contact
, purchaseTech :: Maybe Contact
, purchaseBilling :: Maybe Contact } deriving (Show)
instance ToJSON DomainPurchase where
toJSON (DomainPurchase pd pc pp pns pr ppr pre pa pt pb) =
object [ "domain" .= pd
, "consent" .= pc
, "period" .= pp
, "nameServers" .= pns
, "renewAuto" .= pr
, "privacy" .= ppr
, "contactRegistrant" .= pre
, "contactAdmin" .= pa
, "contactTech" .= pt
, "contactBilling" .= pb ]
instance FromJSON DomainPurchase where
parseJSON (Object v) =
DomainPurchase <$> v .: "domain"
<*> v .: "consent"
<*> v .:? "period"
<*> v .:? "nameServers"
<*> v .:? "renewAuto"
<*> v .:? "privacy"
<*> v .:? "contactRegistrant"
<*> v .:? "contactAdmin"
<*> v .:? "contactTech"
<*> v .:? "contactBilling"
parseJSON _ = fail "DomainPurchase object not found"
data SchemaDataType = SchemaDataType { dataType :: String
, dataRef :: String
, dataFormat :: Maybe String
, dataPattern :: Maybe String } deriving (Show)
instance ToJSON SchemaDataType where
toJSON (SchemaDataType dt dr df dp) =
object [ "type" .= dt
, "$ref" .= dr
, "format" .= df
, "pattern" .= dp ]
instance FromJSON SchemaDataType where
parseJSON (Object v) =
SchemaDataType <$> v .: "type"
<*> v .: "$ref"
<*> v .:? "format"
<*> v .:? "pattern"
parseJSON _ = fail "SchemaDataType object not found"
data SchemaProperties = SchemaProperties { propertyType :: String
, propertyRef :: String
, propertyItems :: Maybe [SchemaDataType]
, propertyRequired :: Bool
, propertyMaxItems :: Maybe Integer
, propertyMinItems :: Maybe Integer
, propertyDefaultValue :: Maybe String
, propertyFormat :: Maybe String
, propertyPattern :: Maybe String
, propertyMaximum :: Maybe Integer
, propertyMinimum :: Maybe Integer } deriving (Show)
instance ToJSON SchemaProperties where
toJSON (SchemaProperties pt pr pi preq pmax pmin pdv pf pp pm pn) =
object [ "type" .= pt
, "$ref" .= pr
, "items" .= pi
, "required" .= preq
, "maxItems" .= pmax
, "minItems" .= pmin
, "defaultValue" .= pdv
, "format" .= pf
, "pattern" .= pp
, "maximum" .= pm
, "minimum" .= pn ]
instance FromJSON SchemaProperties where
parseJSON (Object v) =
SchemaProperties <$> v .: "type"
<*> v .: "$ref"
<*> v .:? "items"
<*> v .: "required"
<*> v .:? "maxItems"
<*> v .:? "minItems"
<*> v .:? "defaultValue"
<*> v .:? "format"
<*> v .:? "pattern"
<*> v .:? "maximum"
<*> v .:? "minimum"
parseJSON _ = fail "SchemaProperties object not found"
data Schema = Schema { schemaId :: String
, schemaProperties :: [SchemaProperties]
, schemaRequired :: [String]
, schemaModels :: Schema } deriving (Show)
instance ToJSON Schema where
toJSON (Schema sid sp sr sm) =
object [ "id" .= sid
, "properties" .= sp
, "required" .= sr
, "models" .= sm ]
instance FromJSON Schema where
parseJSON (Object v) =
Schema <$> v .: "id"
<*> v .: "properties"
<*> v .: "required"
<*> v .: "models"
data DomainSuggestion = DomainSuggestion { suggestedDomain :: String } deriving (Show)
instance ToJSON DomainSuggestion where
toJSON (DomainSuggestion sd) = object [ "domain" .= sd ]
instance FromJSON DomainSuggestion where
parseJSON (Object v) = DomainSuggestion <$> v .: "domain"
parseJSON _ = fail "DomainSuggestion object not found"
data TldSummary = TldSummary { tldName :: String
, tldType :: String } deriving (Show)
instance ToJSON TldSummary where
toJSON (TldSummary n t) = object [ "name" .= n, "type" .= t ]
instance FromJSON TldSummary where
parseJSON (Object v) = TldSummary <$> v .: "name" <*> v .: "type"
parseJSON _ = fail "TldSummary object not found"