mailchimp 0.2.1 → 0.3.0
raw patch · 3 files changed
+73/−4 lines, 3 filesdep ~aesonPVP ok
version bump matches the API change (PVP)
Dependency ranges changed: aeson
API changes (from Hackage documentation)
+ Web.MailChimp.List.Member: ListMembersResponse :: [ListMemberResponse] -> ListMembersResponse
+ Web.MailChimp.List.Member: [listMemberResponseEmail] :: ListMemberResponse -> Text
+ Web.MailChimp.List.Member: [listMemberResponseStatus] :: ListMemberResponse -> ListMemberStatus
+ Web.MailChimp.List.Member: [listMembersMembers] :: ListMembersResponse -> [ListMemberResponse]
+ Web.MailChimp.List.Member: data ListMembersResponse
+ Web.MailChimp.List.Member: getAllListMembers :: ListMemberClient -> ClientM [ListMemberResponse]
+ Web.MailChimp.List.Member: instance Data.Aeson.Types.FromJSON.FromJSON Web.MailChimp.List.Member.ListMemberStatus
+ Web.MailChimp.List.Member: instance Data.Aeson.Types.FromJSON.FromJSON Web.MailChimp.List.Member.ListMembersResponse
+ Web.MailChimp.List.Member: instance GHC.Show.Show Web.MailChimp.List.Member.ListMembersResponse
- Web.MailChimp.List.Member: ListMemberClient :: (ListMemberRequest -> ClientM ListMemberResponse) -> ClientM [ListMemberResponse] -> (ListMemberId -> ClientM ListMemberResponse) -> (ListMemberId -> ListMemberRequest -> ClientM ListMemberResponse) -> (ListMemberId -> ListMemberRequest -> ClientM ListMemberResponse) -> (ListMemberId -> ClientM String) -> ListMemberClient
+ Web.MailChimp.List.Member: ListMemberClient :: (ListMemberRequest -> ClientM ListMemberResponse) -> (Maybe Int -> ClientM ListMembersResponse) -> (ListMemberId -> ClientM ListMemberResponse) -> (ListMemberId -> ListMemberRequest -> ClientM ListMemberResponse) -> (ListMemberId -> ListMemberRequest -> ClientM ListMemberResponse) -> (ListMemberId -> ClientM String) -> ListMemberClient
- Web.MailChimp.List.Member: ListMemberResponse :: ListMemberId -> ListMemberResponse
+ Web.MailChimp.List.Member: ListMemberResponse :: ListMemberId -> Text -> ListMemberStatus -> ListMemberResponse
- Web.MailChimp.List.Member: [getListMembers] :: ListMemberClient -> ClientM [ListMemberResponse]
+ Web.MailChimp.List.Member: [getListMembers] :: ListMemberClient -> Maybe Int -> ClientM ListMembersResponse
- Web.MailChimp.List.Member: type ListMemberApi = (ReqBody '[JSON] ListMemberRequest :> Post '[JSON] ListMemberResponse) :<|> (Get '[JSON] [ListMemberResponse] :<|> ((Capture "subscriber_hash" ListMemberId :> Get '[JSON] ListMemberResponse) :<|> ((Capture "subscriber_hash" ListMemberId :> (ReqBody '[JSON] ListMemberRequest :> Patch '[JSON] ListMemberResponse)) :<|> ((Capture "subscriber_hash" ListMemberId :> (ReqBody '[JSON] ListMemberRequest :> Put '[JSON] ListMemberResponse)) :<|> (Capture "subscriber_hash" ListMemberId :> Delete '[JSON] String)))))
+ Web.MailChimp.List.Member: type ListMemberApi = (ReqBody '[JSON] ListMemberRequest :> Post '[JSON] ListMemberResponse) :<|> ((QueryParam "offset" Int :> Get '[JSON] ListMembersResponse) :<|> ((Capture "subscriber_hash" ListMemberId :> Get '[JSON] ListMemberResponse) :<|> ((Capture "subscriber_hash" ListMemberId :> (ReqBody '[JSON] ListMemberRequest :> Patch '[JSON] ListMemberResponse)) :<|> ((Capture "subscriber_hash" ListMemberId :> (ReqBody '[JSON] ListMemberRequest :> Put '[JSON] ListMemberResponse)) :<|> (Capture "subscriber_hash" ListMemberId :> Delete '[JSON] String)))))
Files
- CHANGELOG.md +7/−0
- mailchimp.cabal +2/−2
- src/Web/MailChimp/List/Member.hs +64/−2
CHANGELOG.md view
@@ -1,3 +1,10 @@+# 0.3.0++- Added pagination to get list members and helper to get all list+ members (7593fb3).++- Fixed list members response (8f47755).+ # 0.2.1 - Tested with GHC 8.0.2.
mailchimp.cabal view
@@ -1,5 +1,5 @@ name: mailchimp-version: 0.2.1+version: 0.3.0 build-type: Simple cabal-version: >= 1.21@@ -42,7 +42,7 @@ other-modules: Paths_mailchimp build-depends:- aeson >= 1.1 && < 1.2+ aeson >= 1.0 && < 1.2 , attoparsec >= 0.13 && < 0.14 , base >= 4.8 && < 4.10 , bytestring
src/Web/MailChimp/List/Member.hs view
@@ -22,6 +22,8 @@ , ListMemberRequest (..) , makeListMemberRequest , ListMemberResponse (..)+ , ListMembersResponse (..)+ , getAllListMembers , ListMemberId , ListMemberStatus (..) )@@ -64,7 +66,8 @@ :> Post '[JSON] ListMemberResponse :<|>- Get '[JSON] [ListMemberResponse]+ QueryParam "offset" Int+ :> Get '[JSON] ListMembersResponse :<|> Capture "subscriber_hash" ListMemberId@@ -104,7 +107,8 @@ -- Get information about members in a list. , getListMembers- :: ClientM [ListMemberResponse]+ :: Maybe Int+ -> ClientM ListMembersResponse -- | --@@ -147,7 +151,29 @@ -- | -- --+--+-- @since 0.3.0 +getAllListMembers+ :: ListMemberClient+ -> ClientM [ListMemberResponse]+getAllListMembers ListMemberClient {..} = do+ xs <- listMembersMembers <$> getListMembers Nothing+ rest <- go 0 (length xs)+ return $ xs ++ rest+ where+ go :: Int -> Int -> ClientM [ListMemberResponse]+ go _ 0 = return []+ go offset n = do+ xs <- listMembersMembers <$> getListMembers (Just $ offset + n)+ rest <- go (offset + n) (length xs)+ return $ xs ++ rest+++-- |+--+--+ instance Generics.SOP.Generic ListMemberClient @@ -214,6 +240,8 @@ data ListMemberResponse = ListMemberResponse { listMemberId :: ListMemberId+ , listMemberResponseEmail :: Text+ , listMemberResponseStatus :: ListMemberStatus } deriving (Show) @@ -228,12 +256,36 @@ \o -> ListMemberResponse <$> o .: "id"+ <*> o .: "email_address"+ <*> o .: "status" -- | -- -- +data ListMembersResponse =+ ListMembersResponse+ { listMembersMembers :: [ListMemberResponse]+ }+ deriving (Show)++-- |+--+--++instance FromJSON ListMembersResponse where+ parseJSON =+ Aeson.withObject "" $+ \o ->+ ListMembersResponse+ <$> o .: "members"+++-- |+--+--+ data ListMemberStatus = Cleaned | Pending@@ -251,3 +303,13 @@ toJSON Pending = "pending" toJSON Subscribed = "subscribed" toJSON Unsubscribed = "unsubscribed"++instance FromJSON ListMemberStatus where+ parseJSON =+ Aeson.withText "" $+ \s -> case s of+ "cleaned" -> return Cleaned+ "pending" -> return Pending+ "subscribed" -> return Subscribed+ "unsubscribed" -> return Unsubscribed+ other -> fail $ "expected ListMemberStatus, encountered " ++ show other