packages feed

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 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