@@ -29,14 +29,14 @@ module Network.PagerDuty.Internal.Types where
29import Control.Applicative
29import Control.Applicative
30import Control.Lens hiding ((.=), Empty)
30import 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
@@ -53,7 +53,7 @@ import Network.PagerDuty.Internal.TH
53import Data.Time.Locale.Compat
53import Data.Time.Locale.Compat
55newtype CSV a = CSV [a]
55newtype CSV a = CSV [a]
56− deriving (Eq, Show, Monoid)
56+ deriving (Eq, Show, Semigroup, Monoid)
58makePrisms ''CSV
58makePrisms ''CSV
@@ -70,7 +70,7 @@ instance ToByteString a => ToJSON (CSV a) where
70 toJSON = String . Text.decodeUtf8 . toByteString'
70 toJSON = String . Text.decodeUtf8 . toByteString'
72newtype List a = L [a]
72newtype List a = L [a]
73− deriving (Eq, Show, Monoid)
73+ deriving (Eq, Show, Semigroup, Monoid)
75deriveJSON ''List
75deriveJSON ''List
76makePrisms ''List
76makePrisms ''List
@@ -279,8 +279,13 @@ data Pager = Pager
280makeLenses ''Pager
280makeLenses ''Pager
284+ , _pgPager :: Maybe Pager
282−instance FromJSON a => FromJSON (a, Maybe Pager) where
287+instance FromJSON a => FromJSON (Page a) where
283− parseJSON = withObject "paginated" $ \o -> (,)
288+ parseJSON = withObject "paginated" $ \o -> Page
284 <$> parseJSON (Object o)
289 <$> parseJSON (Object o)
285 <*> optional (parse o)
290 <*> optional (parse o)
@@ -305,11 +310,13 @@ data Path where
305 Path :: Path
310 Path :: Path
306 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)
308instance Monoid Path where
318instance Monoid Path where
309− mempty = Path
319+ mempty = Path
312− mappend (Seg x) (Seg y) = Seg (builder x <> "/" <> builder y)
314instance IsString Path where
321instance IsString Path where
315 fromString = Seg
322 fromString = Seg