module RESTng.System.Resource ( module RESTng.System.Proxy, OwnerId, SystemFields, Resource, resourceType, key, setKey, keyName, ownable, ownerId, setOwnerId, ownerIdName, userFields, nonKeyFields, userFieldsWithKey ) where import RESTng.System.Proxy type OwnerId = Integer type SystemFields = (Integer, Maybe OwnerId) class Resource a where resourceType :: Proxy a-> String key :: a -> Integer setKey :: a -> Integer -> a keyName :: Proxy a -> String; keyName _ = "id" ownable :: Proxy a -> Bool; ownable _ = False ownerId :: a -> OwnerId setOwnerId :: OwnerId -> a -> a ownerIdName :: Proxy a -> String; ownerIdName _ = "owner_id" userFields :: Proxy a -> [String] ------------------------------------ -- Serializing to text. (records) -- ------------------------------------ nonKeyFields :: Resource a => Proxy a -> [String] nonKeyFields pr = if ownable pr then ownerIdName pr : userFields pr else userFields pr userFieldsWithKey :: Resource a => Proxy a -> [String] userFieldsWithKey r = keyName r : userFields r