module Database.Cayley.Types where
import Control.Monad
import qualified Data.Aeson as A
import qualified Data.Text as T
import Network.HTTP.Client (Manager)
data APIVersion = V1
instance Show APIVersion where
show V1 = "1"
data QueryLang = Gremlin | MQL
instance Show QueryLang where
show Gremlin = "gremlin"
show MQL = "mql"
data CayleyConfig = CayleyConfig
{ serverPort :: Int
, serverName :: String
, apiVersion :: APIVersion
, queryLang :: QueryLang
} deriving (Show)
defaultCayleyConfig :: CayleyConfig
defaultCayleyConfig = CayleyConfig
{ serverPort = 64210
, serverName = "localhost"
, apiVersion = V1
, queryLang = Gremlin
}
data CayleyConnection = CayleyConnection (CayleyConfig,Manager)
data Quad = Quad
{ subject :: T.Text
, predicate :: T.Text
, object :: T.Text
, label :: Maybe T.Text
}
instance Show Quad where
show (Quad s p o (Just l)) = T.unpack s
++ " -- "
++ T.unpack p
++ " -> "
++ T.unpack o
++ " ("
++ T.unpack l
++ ")"
show (Quad s p o Nothing) = T.unpack s
++ " -- "
++ T.unpack p
++ " -> "
++ T.unpack o
instance Eq Quad where
Quad s p o l == Quad s' p' o' l' = s == s' && p == p' && o == o' && l == l'
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
type Query = T.Text
type Subject = T.Text
type Predicate = T.Text
type Object = T.Text
type Label = T.Text