{-# LANGUAGE DeriveDataTypeable #-}
{-# LANGUAGE GeneralizedNewtypeDeriving #-}
module DocuSign.Client.Types
( AccountId
, AccountName
, DocumentId
, EmailAddress
, EnvelopeId
, PostSigningUri
, RecipientId
, SigningUri
, Uri
, UserId
, UserName
, mkAccountId
, mkAccountName
, mkDocumentId
, mkEmailAddress
, mkEnvelopeId
, mkRecipientId
, mkUri
, mkUserId
, mkUserName
, unAccountId
, unAccountName
, unDocumentId
, unEmailAddress
, unEnvelopeId
, unRecipientId
, unUri
, unUserId
, unUserName
, AccountInfo (..)
, Document (..)
, Envelope (..)
, Recipient (..)
, RedirectionOptions (..)
, SigningEvent (..)
, SigningMethod (..)
) where
import Control.Exception ( assert )
import Data.Aeson ( FromJSON
, ToJSON )
import Data.Data ( Data )
import Data.Text ( Text )
import Data.Typeable ( Typeable )
import Data.UUID ( UUID )
import DocuSign.Base.ContentTypes ( PDF )
type SigningUri = Uri
type PostSigningUri = Uri
newtype AccountId = AccountId { unAccountId :: Integer }
deriving (Enum, Eq, FromJSON, Integral, Num, Ord, Read, Real, Show, ToJSON, Typeable)
mkAccountId :: Integer -> AccountId
mkAccountId i = assert (i > 0) $ AccountId i
newtype AccountName = AccountName { unAccountName :: Text }
deriving (Eq, FromJSON, Read, Show, ToJSON, Typeable)
mkAccountName :: Text -> AccountName
mkAccountName = AccountName
newtype DocumentId = DocumentId { unDocumentId :: Integer }
deriving (Data, Enum, Eq, FromJSON, Integral, Num, Ord, Read, Real, Show, ToJSON, Typeable)
mkDocumentId :: Integer -> DocumentId
mkDocumentId i = assert (i > 0) $ DocumentId i
newtype EmailAddress = EmailAddress { unEmailAddress :: Text }
deriving (Eq, FromJSON, Read, Show, ToJSON, Typeable)
mkEmailAddress :: Text -> EmailAddress
mkEmailAddress = EmailAddress
newtype EnvelopeId = EnvelopeId { unEnvelopeId :: UUID }
deriving (Data, Eq, FromJSON, Read, Show, ToJSON, Typeable)
mkEnvelopeId :: UUID -> EnvelopeId
mkEnvelopeId = EnvelopeId
newtype RecipientId = RecipientId { unRecipientId :: Text }
deriving (Eq, FromJSON, Read, Show, ToJSON, Typeable)
mkRecipientId :: Text -> RecipientId
mkRecipientId = RecipientId
newtype Uri = Uri { unUri :: Text }
deriving (Eq, FromJSON, Read, Show, ToJSON, Typeable)
mkUri :: Text -> Uri
mkUri = Uri
newtype UserId = UserId { unUserId :: Text }
deriving (Eq, FromJSON, Read, Show, ToJSON, Typeable)
mkUserId :: Text -> UserId
mkUserId = UserId
newtype UserName = UserName { unUserName :: Text }
deriving (Eq, FromJSON, Read, Show, ToJSON, Typeable)
mkUserName :: Text -> UserName
mkUserName = UserName
data SigningEvent
= SigningCancelled
| SigningCompleted
| SigningDeclined
| SigningException
| SigningFaxPending
| SigningIdCheckFailed
| SigningSessionExpired
| SigningTokenExpired
| SigningViewingCompleted
deriving (Eq, Show, Typeable)
data SigningMethod
= EmailBasedSigning
| RedirectionBasedSigning
data AccountInfo = AccountInfo
{ accountId :: AccountId
, accountIsDefault :: Bool
, accountName :: AccountName
, accountUserId :: UserId
, accountUserName :: UserName }
data Document = Document
{ documentContent :: PDF
, documentId :: DocumentId
, documentName :: Text }
data Envelope = Envelope
{ envelopeSubject :: Text
, envelopeMessage :: Text }
data Recipient = Recipient
{ recipientClientUserId :: UserId
, recipientEmailAddress :: EmailAddress
, recipientName :: Text
, recipientSignatureAnchorText :: Maybe Text }
newtype RedirectionOptions = RedirectionOptions
{ postSigningRedirectionUri :: Uri }