cayley-client 0.1.0.0 → 0.1.0.1
raw patch · 3 files changed
+84/−3 lines, 3 filesdep ~base
Dependency ranges changed: base
Files
- Database/Cayley/Internal.hs +32/−0
- Database/Cayley/Types.hs +49/−0
- cayley-client.cabal +3/−3
+ Database/Cayley/Internal.hs view
@@ -0,0 +1,32 @@+{-# LANGUAGE OverloadedStrings #-}++module Database.Cayley.Internal where+ +import Control.Monad.Catch+import Control.Monad.IO.Class+import Control.Monad.Reader+import qualified Data.Aeson as A+import qualified Data.Text as T (pack)+import Data.Vector (fromList)+import Network.HTTP.Client++import Database.Cayley.Types++apiRequest :: Manager -> String -> Int -> RequestBody -> ReaderT CayleyConfig IO (Maybe A.Value)+apiRequest m u p b = do+ r <- parseUrl u >>= \c ->+ return c { method = "POST", port = p, requestBody = b }+ t <- liftIO $ try $ httpLbs r m+ case t of+ Right r -> return $ A.decode $ responseBody r+ Left e ->+ return $+ Just $+ A.object ["error" A..= T.pack (show (e :: SomeException))]++toRequestBody :: [Quad] -> RequestBody+toRequestBody qs = RequestBodyLBS $ A.encode $ fromList $ map A.toJSON qs++getManager (CayleyConnection (_,m)) = m++getConfig (CayleyConnection (c,_)) = c
+ Database/Cayley/Types.hs view
@@ -0,0 +1,49 @@+{-# LANGUAGE OverloadedStrings #-}++module Database.Cayley.Types where++import qualified Data.Aeson as A+import Control.Applicative+import Control.Monad+import qualified Data.Text as T+import Network.HTTP.Client (Manager)++data CayleyConfig = CayleyConfig+ { serverPort :: Int -- ^ Default to 64210+ , serverName :: String -- ^ Default to "localhost"+ , apiVersion :: String -- ^ Default to "1"+ , queryLang :: String -- ^ Default to "gremlin"+ } deriving (Eq,Show)++-- | CayleyConfig { serverPort = 64210 , serverName = "localhost" , apiVersion = "1" , queryLang = "gremlin" }+defaultCayleyConfig = CayleyConfig+ { serverPort = 64210+ , serverName = "localhost"+ , apiVersion = "1"+ , queryLang = "gremlin"+ }++data CayleyConnection = CayleyConnection (CayleyConfig,Manager)+ +data Quad = Quad+ { subject :: T.Text -- ^ Subject node+ , predicate :: T.Text -- ^ Predicate node+ , object :: T.Text -- ^ Object node+ , label :: Maybe T.Text -- ^ Label node+ } deriving (Eq,Show)++instance A.ToJSON Quad where+ toJSON (Quad subject predicate object label) =+ A.object [ "subject" A..= subject+ , "predicate" A..= predicate+ , "object" A..= object+ , "label" A..= label+ ]++instance A.FromJSON Quad where+ parseJSON (A.Object v) = Quad <$>+ v A..: "subject" <*>+ v A..: "predicate" <*>+ v A..: "object" <*>+ v A..: "label"+ parseJSON _ = mzero
cayley-client.cabal view
@@ -1,9 +1,9 @@ name: cayley-client-version: 0.1.0.0+version: 0.1.0.1 stability: Experimental synopsis: An Haskell client for Cayley graph database description: cayley-client implements the RESTful API of the Cayley database graph.-homepage: http://mb.cybervisible.fr/haskell-cayley-client+homepage: http://mb.cybervisible.fr/cayley-client-for-haskell license: BSD3 license-file: LICENSE author: Michel Boucey@@ -18,7 +18,7 @@ Location: https://github.com/MichelBoucey/cayley-client library- exposed-modules: Database.Cayley.Client+ exposed-modules: Database.Cayley.Client, Database.Cayley.Types, Database.Cayley.Internal other-extensions: OverloadedStrings build-depends: base >=4.7 && <4.8, mtl >=2.1 && <2.2, transformers >=0.3 && <0.4, attoparsec >=0.12 && <0.13, bytestring >=0.10 && <0.11, text >=1.2 && <1.3, vector >=0.10 && <0.11, http-conduit >=2.1 && <2.2, http-client >=0.4 && <0.5, aeson >=0.8 && <0.9, lens >= 4.6.0.1, lens-aeson >=1.0.0.3, unordered-containers >=0.2 && <0.3, exceptions >= 0.6 && <0.7 default-language: Haskell2010