@@ -27,32 +27,33 @@
27module Network.PagerDuty.Internal.Types where
27module Network.PagerDuty.Internal.Types where
29import Control.Applicative
29import Control.Applicative
30−import Control.Lens hiding ((.=))
30+import Control.Lens hiding ((.=), Empty)
31import Control.Monad.IO.Class
31import Control.Monad.IO.Class
32−import Data.Aeson hiding (Error)
32+import Data.Aeson hiding (Error, Key)
33+import qualified Data.Aeson.KeyMap as Map
33import Data.Aeson.Types (Parser)
34import Data.Aeson.Types (Parser)
34import Data.ByteString (ByteString)
35import Data.ByteString (ByteString)
35import qualified Data.ByteString.Char8 as BS
36import qualified Data.ByteString.Char8 as BS
36import Data.ByteString.Conversion hiding (List)
37import Data.ByteString.Conversion hiding (List)
37import Data.Default.Class
38import Data.Default.Class
38import Data.Function (on)
39import Data.Function (on)
39−import qualified Data.HashMap.Strict as Map
40import Data.List (deleteBy, intersperse)
40import Data.List (deleteBy, intersperse)
41import Data.Monoid
41import Data.Monoid
42import Data.String
42import Data.String
43import Data.Text (Text)
43import Data.Text (Text)
44import qualified Data.Text as Text
44import qualified Data.Text as Text
45import qualified Data.Text.Encoding as Text
45import qualified Data.Text.Encoding as Text
46−import Data.Time
46+import Data.Time (UTCTime, TimeZone, formatTime, utc, timeZoneName)
47import GHC.TypeLits
47import GHC.TypeLits
48import Network.HTTP.Client (Manager)
48import Network.HTTP.Client (Manager)
49import Network.HTTP.Types
49import Network.HTTP.Types
50import Network.HTTP.Types.QueryLike
50import Network.HTTP.Types.QueryLike
51import Network.PagerDuty.Internal.Query
51import Network.PagerDuty.Internal.Query
52import Network.PagerDuty.Internal.TH
52import Network.PagerDuty.Internal.TH
53+import Data.Time.Locale.Compat
54newtype CSV a = CSV [a]
55newtype CSV a = CSV [a]
55− deriving (Eq, Show, Monoid)
56+ deriving (Eq, Show, Semigroup, Monoid)
57makePrisms ''CSV
58makePrisms ''CSV
@@ -69,7 +70,7 @@ instance ToByteString a => ToJSON (CSV a) where
69 toJSON = String . Text.decodeUtf8 . toByteString'
70 toJSON = String . Text.decodeUtf8 . toByteString'
71newtype List a = L [a]
72newtype List a = L [a]
72− deriving (Eq, Show, Monoid)
73+ deriving (Eq, Show, Semigroup, Monoid)
74deriveJSON ''List
75deriveJSON ''List
75makePrisms ''List
76makePrisms ''List
@@ -105,7 +106,7 @@ instance ToJSON Date where
106instance ToByteString Date where
107instance ToByteString Date where
107 builder (D d) = builder
108 builder (D d) = builder
108− (formatTime defaultTimeLocale (iso8601DateFormat $ Just "%XZ") d)
109+ (formatTime defaultTimeLocale ("%Y-%m-%dT%XZ") d)
110instance QueryValues Date
111instance QueryValues Date
@@ -132,8 +133,8 @@ data Security = Basic | Token
132 deriving (Eq, Show)
133 deriving (Eq, Show)
134data Auth (a :: Security) where
135data Auth (a :: Security) where
135− AuthBasic :: ByteString -> ByteString -> Auth Basic
136+ AuthBasic :: ByteString -> ByteString -> Auth 'Basic
136− AuthToken :: ByteString -> Auth Token
137+ AuthToken :: ByteString -> Auth 'Token
138deriving instance Eq (Auth a)
139deriving instance Eq (Auth a)
139deriving instance Show (Auth a)
140deriving instance Show (Auth a)
@@ -278,8 +279,13 @@ data Pager = Pager
279makeLenses ''Pager
280makeLenses ''Pager
284+ , _pgPager :: Maybe Pager
281−instance FromJSON a => FromJSON (a, Maybe Pager) where
287+instance FromJSON a => FromJSON (Page a) where
282− parseJSON = withObject "paginated" $ \o -> (,)
288+ parseJSON = withObject "paginated" $ \o -> Page
283 <$> parseJSON (Object o)
289 <$> parseJSON (Object o)
284 <*> optional (parse o)
290 <*> optional (parse o)
@@ -304,11 +310,13 @@ data Path where
304 Path :: Path
310 Path :: Path
305 Seg :: ToByteString a => a -> Path
311 Seg :: ToByteString a => a -> Path
313+instance Semigroup Path where
316+ Seg x <> Seg y = Seg (builder x <> "/" <> builder y)
307instance Monoid Path where
318instance Monoid Path where
308− mempty = Path
319+ mempty = Path
311− mappend (Seg x) (Seg y) = Seg (builder x <> "/" <> builder y)
313instance IsString Path where
321instance IsString Path where
314 fromString = Seg
322 fromString = Seg