pixela 0.1.0.0 → 0.2.0.0
raw patch · 4 files changed
+79/−69 lines, 4 files
Files
- ChangeLog.md +9/−1
- README.md +4/−0
- pixela.cabal +6/−6
- src/Web/Pixela.hs +60/−62
ChangeLog.md view
@@ -1,3 +1,11 @@ # Changelog for pixela -## Unreleased changes+## 0.2.0.0++### Breaking Change++- `version` has been removed.++## 0.1.0.0++First release.
README.md view
@@ -1,3 +1,7 @@ # Pixela client for Haskell This is [Pixela](https://pixe.la/) client for Haskell.++## API Reference++This API reference is at [Hackage](http://hackage.haskell.org/package/pixela).
pixela.cabal view
@@ -4,15 +4,15 @@ -- -- see: https://github.com/sol/hpack ----- hash: bd1fc33f3adcd9cefe5837a71f3de4b922a2eb5993aa87d00ef45be247555726+-- hash: 26e281551fa92a971d8a31928324bc9c33922b103a1cd024afef5cb04a0fb10a name: pixela-version: 0.1.0.0+version: 0.2.0.0 synopsis: Pixela client.-description: Pixela (https://pixe.la/) client library.+description: Pixela (<https://pixe.la/>) client library. category: Web-homepage: https://github.com/kakkun61/pixela#readme-bug-reports: https://github.com/kakkun61/pixela/issues+homepage: https://github.com/kakkun61/pixela-client-haskell/tree/master/lib+bug-reports: https://github.com/kakkun61/pixela-client-haskell/issues author: Kazuki Okamoto maintainer: kazuki.okamoto@kakkun61.com copyright: Kazuki Okamoto@@ -25,7 +25,7 @@ source-repository head type: git- location: https://github.com/kakkun61/pixela+ location: https://github.com/kakkun61/pixela-client-haskell library exposed-modules:
src/Web/Pixela.hs view
@@ -23,8 +23,6 @@ , Quantity , WebhookType , WebhookHash- -- * Constants- , version -- * User functions , createUser , updateToken@@ -52,25 +50,29 @@ , deleteWebhook ) where -import Control.Exception hiding (Exception)-import qualified Control.Exception as E (Exception)-import Control.Monad-import Data.Aeson ((.=))-import qualified Data.Aeson as Aeson+import Control.Exception hiding (Exception)+import qualified Control.Exception as E (Exception)+import Control.Monad+import Data.Aeson ((.=))+import qualified Data.Aeson as Aeson+import qualified Data.ByteString.Char8 as BS import qualified Data.ByteString.Lazy.Char8 as BSL-import qualified Data.ByteString.Char8 as BS-import Data.Default-import qualified Data.HashMap.Strict as HashMap-import Data.String-import Data.Text (Text)-import qualified Data.Text as Text-import Data.Typeable-import qualified Data.Vector as Vector-import Network.HTTP.Client-import Network.HTTP.Client.TLS-import Network.HTTP.Types-import qualified Network.URI.Encode as URI+import Data.Default+import qualified Data.HashMap.Strict as HashMap+import Data.Maybe (fromMaybe)+import Data.String+import Data.Text (Text)+import qualified Data.Text as Text+import Data.Typeable+import qualified Data.Vector as Vector+import Data.Version (showVersion)+import Network.HTTP.Client+import Network.HTTP.Client.TLS+import Network.HTTP.Types+import qualified Network.URI.Encode as URI +import Paths_pixela (version)+ -- | Pixela client. -- -- @@@ -84,17 +86,17 @@ -- @ data Client = Client- { config :: Config+ { config :: Config , _httpManager :: Manager } -- | Client configuration. data Config = Config- { endPoint :: Url+ { endPoint :: Url , httpManagerSettings :: ManagerSettings- , userName :: UserName- , token :: Token+ , userName :: UserName+ , token :: Token } instance Default Config where@@ -105,7 +107,7 @@ "" "" -data Exception =+newtype Exception = JsonException String deriving (Show, Eq, Typeable) @@ -121,9 +123,9 @@ -- 'fromParameter' is safe. fromParameter' :: (FromParameter a) => String -> a fromParameter' param =- case fromParameter param of- Just a -> a- Nothing -> error $ "pixela: error parsing \"" <> param <> "\""+ fromMaybe+ (error $ "pixela: error parsing \"" <> param <> "\"")+ (fromParameter param) -- | A type class to convert a value to 'String'. class ToParameter a where@@ -145,12 +147,12 @@ data GraphType = GraphTypeInt | GraphTypeFloat deriving (Show, Read, Eq) instance FromParameter GraphType where- fromParameter "int" = Just GraphTypeInt+ fromParameter "int" = Just GraphTypeInt fromParameter "float" = Just GraphTypeFloat- fromParameter _ = Nothing+ fromParameter _ = Nothing instance ToParameter GraphType where- toParameter GraphTypeInt = "int"+ toParameter GraphTypeInt = "int" toParameter GraphTypeFloat = "float" data GraphColor@@ -164,20 +166,20 @@ instance FromParameter GraphColor where fromParameter "shibafu" = Just Shibafu- fromParameter "momiji" = Just Momiji- fromParameter "sora" = Just Sora- fromParameter "ichou" = Just Ichou- fromParameter "ajisai" = Just Ajisai- fromParameter "kuro" = Just Kuro- fromParameter _ = Nothing+ fromParameter "momiji" = Just Momiji+ fromParameter "sora" = Just Sora+ fromParameter "ichou" = Just Ichou+ fromParameter "ajisai" = Just Ajisai+ fromParameter "kuro" = Just Kuro+ fromParameter _ = Nothing instance ToParameter GraphColor where toParameter Shibafu = "shibafu"- toParameter Momiji = "momiji"- toParameter Sora = "sora"- toParameter Ichou = "ichou"- toParameter Ajisai = "ajisai"- toParameter Kuro = "kuro"+ toParameter Momiji = "momiji"+ toParameter Sora = "sora"+ toParameter Ichou = "ichou"+ toParameter Ajisai = "ajisai"+ toParameter Kuro = "kuro" type DateFormat = String @@ -185,11 +187,11 @@ instance FromParameter DisplayMode where fromParameter "short" = Just ShortMode- fromParameter "" = Just DefaultMode- fromParameter _ = Nothing+ fromParameter "" = Just DefaultMode+ fromParameter _ = Nothing instance ToParameter DisplayMode where- toParameter ShortMode = "short"+ toParameter ShortMode = "short" toParameter DefaultMode = "" type Url = String@@ -201,7 +203,7 @@ instance FromParameter WebhookType where fromParameter "increment" = Just Increment fromParameter "decrement" = Just Decrement- fromParameter _ = Nothing+ fromParameter _ = Nothing instance ToParameter WebhookType where toParameter Increment = "increment"@@ -305,12 +307,12 @@ _ -> Just $ Aeson.object $ case mode of- ShortMode -> ["mode" .= toParameter mode]+ ShortMode -> ["mode" .= toParameter mode] DefaultMode -> [] ++ case maybeFormat of Just format -> ["date" .= format]- Nothing -> []+ Nothing -> [] ) manager @@ -327,19 +329,19 @@ ( Just $ Aeson.object $ case maybeGraphName of Just graphName -> ["name" .= Aeson.String (Text.pack graphName)]- Nothing -> []+ Nothing -> [] ++ case maybeGraphUnit of Just graphUnit -> ["unit" .= Aeson.String (Text.pack graphUnit)]- Nothing -> []+ Nothing -> [] ++ case maybeGraphColor of Just graphColor -> ["color" .= Aeson.String (Text.pack $ toParameter graphColor)]- Nothing -> []+ Nothing -> [] ++ case purgeCacheUrls of _:_ -> ["purgeCacheURLs" .= Aeson.Array (Vector.fromList $ map (Aeson.String . Text.pack) purgeCacheUrls)]- [] -> []+ [] -> [] ) manager @@ -457,7 +459,7 @@ Aeson.Object o -> case HashMap.lookup "webhookHash" o of Just (Aeson.String hashString) -> pure hashString- _ -> throw'+ _ -> throw' _ -> throw' -- | Get the webhook.@@ -513,29 +515,25 @@ request' { method = renderStdMethod method' , requestHeaders =- [("User-Agent", "Pixela Haskell Client " <> version)]- +++ ("User-Agent", "Pixela Haskell Client " <> BS.pack (showVersion version)) : case maybeToken of Just token' -> [("X-USER-TOKEN", BS.pack token')]- Nothing -> []+ Nothing -> [] , requestBody = RequestBodyLBS $ case maybeBody of Just body -> Aeson.encode body- Nothing -> ""+ Nothing -> "" } response <- httpLbs request'' manager pure $ responseBody response- + decodeJson :: BSL.ByteString -> IO Aeson.Value decodeJson responseBody' =- case Aeson.decode $ responseBody' of+ case Aeson.decode responseBody' of Nothing -> throwIO $ JsonException "failed to parse response body as JSON"- Just b -> pure b+ Just b -> pure b (</>) :: (Semigroup p, IsString p) => p -> p -> p p </> q = p <> "/" <> q infixr 6 </>--version :: (IsString a) => a-version = "1.0.0"