pinch-0.1.0.0: examples/keyvalue/Types.hs
{-# LANGUAGE DataKinds #-}
{-# LANGUAGE DeriveGeneric #-}
module Types
( Value(..)
, KeyDoesNotExist(..)
, SetValueRequest(..)
, SetValueResponse(..)
, GetValueRequest(..)
, GetValueResponse(..)
, KeyValue(..)
) where
import Data.ByteString (ByteString)
import Data.Set (Set)
import Data.Text (Text)
import GHC.Generics (Generic)
import qualified Pinch as P
data Value
= ValueBin (P.Field 1 ByteString)
| ValueBinSet (P.Field 2 (Set ByteString))
deriving (Show, Ord, Eq, Generic)
instance P.Pinchable Value
data KeyDoesNotExist = KeyDoesNotExist (P.Field 1 (Maybe Text))
deriving (Show, Ord, Eq, Generic)
instance P.Pinchable KeyDoesNotExist
data SetValueRequest = SetValueRequest
{ setValueKey :: P.Field 1 Text
, setValueValue :: P.Field 2 Value
} deriving (Show, Ord, Eq, Generic)
instance P.Pinchable SetValueRequest
data SetValueResponse = SetValueSuccess P.Void
deriving (Show, Ord, Eq, Generic)
instance P.Pinchable SetValueResponse
data GetValueRequest = GetValueRequest
{ getValueKey :: P.Field 1 Text
} deriving (Show, Ord, Eq, Generic)
instance P.Pinchable GetValueRequest
data GetValueResponse
= GetValueSuccess (P.Field 0 Value)
| GetValueDoesNotExist (P.Field 1 KeyDoesNotExist)
deriving (Show, Ord, Eq, Generic)
instance P.Pinchable GetValueResponse
data KeyValue m = KeyValue
{ getValue :: GetValueRequest -> m GetValueResponse
, setValue :: SetValueRequest -> m SetValueResponse
}