module Rest.Types.Container.Resource
( Resource (..)
, Resources (..)
, KeyValues
, Value (..)
) where
import Data.Aeson hiding (Value)
import Data.JSON.Schema (JSONSchema (..), gSchema)
import Data.Typeable
import GHC.Generics
import Generics.Generic.Aeson
import Generics.Regular (PF, deriveAll)
import Generics.Regular.XmlPickler (gxpickle)
import Rest.StringMap.HashMap.Strict (StringHashMap)
import Text.XML.HXT.Arrow.Pickle
import qualified Data.JSON.Schema.Combinators as Json
type KeyValues = StringHashMap String Value
newtype Value = Value { unValue :: String }
deriving (Show, Typeable)
deriving instance ToJSON Value
deriving instance FromJSON Value
instance JSONSchema Value where
schema _ = Json.value
instance XmlPickler Value where
xpickle = xpElem "value" $ xpWrap (Value, unValue) xpText0
data Resource = Resource
{ uri :: String
, headers :: KeyValues
, parameters :: KeyValues
, input :: String
} deriving (Generic, Show, Typeable)
deriveAll ''Resource "PFResource"
type instance PF Resource = PFResource
instance XmlPickler Resource where
xpickle = gxpickle
instance ToJSON Resource where toJSON = gtoJson
instance FromJSON Resource where parseJSON = gparseJson
instance JSONSchema Resource where schema = gSchema
newtype Resources = Resources [Resource] deriving (Generic, Typeable)
deriveAll ''Resources "PFResources"
type instance PF Resources = PFResources
instance XmlPickler Resources where
xpickle = gxpickle
instance ToJSON Resources where toJSON = gtoJson
instance FromJSON Resources where parseJSON = gparseJson
instance JSONSchema Resources where schema = gSchema