postmark 0.2.0 → 0.2.1
raw patch · 5 files changed
+76/−2 lines, 5 filesPVP: major bump suggested
API removals or changes: PVP suggests a major version bump
API changes (from Hackage documentation)
- Network.Api.Postmark.Data: instance Data.Aeson.Types.Class.FromJSON Network.Api.Postmark.Data.Sent
- Network.Api.Postmark.Data: instance Data.Aeson.Types.Class.ToJSON Network.Api.Postmark.Data.Attachment
- Network.Api.Postmark.Data: instance Data.Aeson.Types.Class.ToJSON Network.Api.Postmark.Data.Email
- Network.Api.Postmark.Error: instance Data.Aeson.Types.Class.FromJSON Network.Api.Postmark.Error.PostmarkError
+ Network.Api.Postmark.Core: emailWithTemplate :: EmailWithTemplate -> PostmarkRequest' Sent
+ Network.Api.Postmark.Data: EmailWithTemplate :: Int -> Map Text Text -> Bool -> Text -> [Text] -> [Text] -> [Text] -> Maybe Text -> Text -> Map Text Text -> [Attachment] -> EmailWithTemplate
+ Network.Api.Postmark.Data: [emailAttachments'] :: EmailWithTemplate -> [Attachment]
+ Network.Api.Postmark.Data: [emailBcc'] :: EmailWithTemplate -> [Text]
+ Network.Api.Postmark.Data: [emailCc'] :: EmailWithTemplate -> [Text]
+ Network.Api.Postmark.Data: [emailFrom'] :: EmailWithTemplate -> Text
+ Network.Api.Postmark.Data: [emailHeaders'] :: EmailWithTemplate -> Map Text Text
+ Network.Api.Postmark.Data: [emailReplyTo'] :: EmailWithTemplate -> Text
+ Network.Api.Postmark.Data: [emailTag'] :: EmailWithTemplate -> Maybe Text
+ Network.Api.Postmark.Data: [emailTo'] :: EmailWithTemplate -> [Text]
+ Network.Api.Postmark.Data: [inlineCss] :: EmailWithTemplate -> Bool
+ Network.Api.Postmark.Data: [templateId] :: EmailWithTemplate -> Int
+ Network.Api.Postmark.Data: [templateModel] :: EmailWithTemplate -> Map Text Text
+ Network.Api.Postmark.Data: data EmailWithTemplate
+ Network.Api.Postmark.Data: defaultEmailWithTemplate :: EmailWithTemplate
+ Network.Api.Postmark.Data: instance Data.Aeson.Types.FromJSON.FromJSON Network.Api.Postmark.Data.Sent
+ Network.Api.Postmark.Data: instance Data.Aeson.Types.ToJSON.ToJSON Network.Api.Postmark.Data.Attachment
+ Network.Api.Postmark.Data: instance Data.Aeson.Types.ToJSON.ToJSON Network.Api.Postmark.Data.Email
+ Network.Api.Postmark.Data: instance Data.Aeson.Types.ToJSON.ToJSON Network.Api.Postmark.Data.EmailWithTemplate
+ Network.Api.Postmark.Error: PostmarkTemplateFieldInvalid :: PostmarkErrorType
+ Network.Api.Postmark.Error: PostmarkTemplateFieldTooLarge :: PostmarkErrorType
+ Network.Api.Postmark.Error: PostmarkTemplateLimitWouldBeExceeded :: PostmarkErrorType
+ Network.Api.Postmark.Error: PostmarkTemplateNoDataReceived :: PostmarkErrorType
+ Network.Api.Postmark.Error: PostmarkTemplateNotFound :: PostmarkErrorType
+ Network.Api.Postmark.Error: PostmarkTemplateQueryException :: PostmarkErrorType
+ Network.Api.Postmark.Error: PostmarkTemplateRequiredFieldMissing :: PostmarkErrorType
+ Network.Api.Postmark.Error: instance Data.Aeson.Types.FromJSON.FromJSON Network.Api.Postmark.Error.PostmarkError
Files
- postmark.cabal +1/−1
- src/Network/Api/Postmark/Core.hs +4/−0
- src/Network/Api/Postmark/Data.hs +42/−0
- src/Network/Api/Postmark/Error.hs +28/−0
- src/Network/Api/Postmark/Tutorial.hs +1/−1
postmark.cabal view
@@ -1,5 +1,5 @@ Name: postmark-Version: 0.2.0+Version: 0.2.1 License: BSD3 License-File: LICENSE Author: Mark Hibberd <mark@hibberd.id.au>
src/Network/Api/Postmark/Core.hs view
@@ -2,6 +2,7 @@ module Network.Api.Postmark.Core ( email, emails,+ emailWithTemplate, request ) where @@ -28,6 +29,9 @@ emails :: [Email] -> PostmarkRequest' [Sent] emails es = PostmarkRequest POST "/email/batch" $ setJson es +-- | Send a single email using a template: https://postmarkapp.com/developer/api/templates-api#email-with-template+emailWithTemplate :: EmailWithTemplate -> PostmarkRequest' Sent+emailWithTemplate ewt = PostmarkRequest POST "/email/withTemplate" $ setJson ewt -- * Run a request
src/Network/Api/Postmark/Data.hs view
@@ -41,6 +41,20 @@ , attachmentContentType :: Text } +data EmailWithTemplate = EmailWithTemplate {+ templateId :: Int+ , templateModel :: Map Text Text+ , inlineCss :: Bool+ , emailFrom' :: Text+ , emailTo' :: [Text]+ , emailCc' :: [Text]+ , emailBcc' :: [Text]+ , emailTag' :: Maybe Text+ , emailReplyTo' :: Text+ , emailHeaders' :: Map Text Text+ , emailAttachments' :: [Attachment]+ }+ defaultEmail :: Email defaultEmail = Email { emailFrom = ""@@ -56,6 +70,20 @@ , emailAttachments = [] } +defaultEmailWithTemplate :: EmailWithTemplate+defaultEmailWithTemplate = EmailWithTemplate {+ templateId = 0+ , templateModel = M.empty+ , inlineCss = False+ , emailFrom' = ""+ , emailTo' = []+ , emailCc' = []+ , emailBcc' = []+ , emailTag' = Nothing+ , emailReplyTo' = ""+ , emailHeaders' = M.empty+ , emailAttachments' = []+ } instance ToJSON Email where toJSON v = object ([@@ -80,6 +108,20 @@ , "ContentType" .= attachmentContentType v ] +instance ToJSON EmailWithTemplate where+ toJSON v = object ([+ "TemplateId" .= templateId v+ , "TemplateModel" .= templateModel v+ , "From" .= (emailFrom' v)+ , "To" .= T.intercalate "," (emailTo' v)+ , "ReplyTo" .= emailReplyTo' v+ ] ++ catMaybes [+ ojson "Tag" (emailTag' v)+ , oljson "Cc" (emailCc' v) (T.intercalate ",")+ , oljson "Bcc" (emailBcc' v) (T.intercalate ",")+ , omjson "Headers" (emailHeaders' v)+ , oljson "Attachments" (emailAttachments' v) id+ ]) -- * Response types data Sent =
src/Network/Api/Postmark/Error.hs view
@@ -25,6 +25,13 @@ | PostmarkBounceQueryException | PostmarkJsonRequired | PostmarkTooManyMessages+ | PostmarkTemplateQueryException+ | PostmarkTemplateNotFound+ | PostmarkTemplateLimitWouldBeExceeded+ | PostmarkTemplateNoDataReceived+ | PostmarkTemplateRequiredFieldMissing+ | PostmarkTemplateFieldTooLarge+ | PostmarkTemplateFieldInvalid | PostmarkUnkownError Int deriving Eq @@ -44,6 +51,13 @@ 408 -> PostmarkBounceQueryException 409 -> PostmarkJsonRequired 410 -> PostmarkTooManyMessages+ 1100 -> PostmarkTemplateQueryException+ 1101 -> PostmarkTemplateNotFound+ 1105 -> PostmarkTemplateLimitWouldBeExceeded+ 1109 -> PostmarkTemplateNoDataReceived+ 1120 -> PostmarkTemplateRequiredFieldMissing+ 1121 -> PostmarkTemplateFieldTooLarge+ 1122 -> PostmarkTemplateFieldInvalid _ -> PostmarkUnkownError code) (o .: "ErrorCode")) <*> (o .: "Message") parseJSON _ = fail "Invalid Postmark Error Response"@@ -73,5 +87,19 @@ "Your HTTP request does not have the Accept and Content-Type headers set to application/json." show PostmarkTooManyMessages = "Your batched request contains more than 500 messages."+ show PostmarkTemplateQueryException =+ "The value of a GET parameter for the request is not valid."+ show PostmarkTemplateNotFound =+ "TemplateId not found. The TemplateId references a Template that does not exist, or is not associated with the Server specified for this request."+ show PostmarkTemplateLimitWouldBeExceeded =+ "Template limit would be exceeded. A Server may have up to 300 active templates, processing this request would exceed this limit."+ show PostmarkTemplateNoDataReceived =+ "No Template data received. You didn’t provide JSON body parameters in your request. Refer to the Template API reference for more details on required parameters."+ show PostmarkTemplateRequiredFieldMissing =+ "A required Template field is missing. A required field is missing from the body of the POST request."+ show PostmarkTemplateFieldTooLarge =+ "Template field is too large. One of the values of the request's body exceeds our size restrictions for that field."+ show PostmarkTemplateFieldInvalid =+ "A Templated field has been submitted that is invalid. One of the fields of the request body is invalid." show (PostmarkUnkownError code) = "An unexpected error code [" ++ show code ++ "] was retured from postmark."
src/Network/Api/Postmark/Tutorial.hs view
@@ -50,7 +50,7 @@ > import Network.Api.Postmark >-> demo = request postmarkHttpTrest $ emails [+> demo = request postmarkHttpTest $ emails [ > defaultEmail { > emailFrom = "demo-from@postmark.hs" > , emailTo = ["demo-to@postmark.hs"]