{-# LANGUAGE TemplateHaskell #-} {-# OPTIONS_GHC -Wno-orphans #-} module Mensam.API.Data.Space.Permission where import Mensam.API.Aeson import Data.Aeson qualified as A import Data.Kind import Data.Singletons.TH import Data.Text qualified as T import Data.Typeable import Deriving.Aeson qualified as A import GHC.Generics type Permission :: Type data Permission = MkPermissionViewSpace | MkPermissionEditDesk | MkPermissionEditUser | MkPermissionEditRole | MkPermissionEditSpace | MkPermissionCreateReservation | MkPermissionCancelReservation deriving stock (Permission Permission -> Permission -> Bounded Permission forall a. a -> a -> Bounded a $cminBound :: Permission minBound :: Permission $cmaxBound :: Permission maxBound :: Permission Bounded, Int -> Permission Permission -> Int Permission -> [Permission] Permission -> Permission Permission -> Permission -> [Permission] Permission -> Permission -> Permission -> [Permission] (Permission -> Permission) -> (Permission -> Permission) -> (Int -> Permission) -> (Permission -> Int) -> (Permission -> [Permission]) -> (Permission -> Permission -> [Permission]) -> (Permission -> Permission -> [Permission]) -> (Permission -> Permission -> Permission -> [Permission]) -> Enum Permission forall a. (a -> a) -> (a -> a) -> (Int -> a) -> (a -> Int) -> (a -> [a]) -> (a -> a -> [a]) -> (a -> a -> [a]) -> (a -> a -> a -> [a]) -> Enum a $csucc :: Permission -> Permission succ :: Permission -> Permission $cpred :: Permission -> Permission pred :: Permission -> Permission $ctoEnum :: Int -> Permission toEnum :: Int -> Permission $cfromEnum :: Permission -> Int fromEnum :: Permission -> Int $cenumFrom :: Permission -> [Permission] enumFrom :: Permission -> [Permission] $cenumFromThen :: Permission -> Permission -> [Permission] enumFromThen :: Permission -> Permission -> [Permission] $cenumFromTo :: Permission -> Permission -> [Permission] enumFromTo :: Permission -> Permission -> [Permission] $cenumFromThenTo :: Permission -> Permission -> Permission -> [Permission] enumFromThenTo :: Permission -> Permission -> Permission -> [Permission] Enum, Permission -> Permission -> Bool (Permission -> Permission -> Bool) -> (Permission -> Permission -> Bool) -> Eq Permission forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a $c== :: Permission -> Permission -> Bool == :: Permission -> Permission -> Bool $c/= :: Permission -> Permission -> Bool /= :: Permission -> Permission -> Bool Eq, (forall x. Permission -> Rep Permission x) -> (forall x. Rep Permission x -> Permission) -> Generic Permission forall x. Rep Permission x -> Permission forall x. Permission -> Rep Permission x forall a. (forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a $cfrom :: forall x. Permission -> Rep Permission x from :: forall x. Permission -> Rep Permission x $cto :: forall x. Rep Permission x -> Permission to :: forall x. Rep Permission x -> Permission Generic, Eq Permission Eq Permission => (Permission -> Permission -> Ordering) -> (Permission -> Permission -> Bool) -> (Permission -> Permission -> Bool) -> (Permission -> Permission -> Bool) -> (Permission -> Permission -> Bool) -> (Permission -> Permission -> Permission) -> (Permission -> Permission -> Permission) -> Ord Permission Permission -> Permission -> Bool Permission -> Permission -> Ordering Permission -> Permission -> Permission forall a. Eq a => (a -> a -> Ordering) -> (a -> a -> Bool) -> (a -> a -> Bool) -> (a -> a -> Bool) -> (a -> a -> Bool) -> (a -> a -> a) -> (a -> a -> a) -> Ord a $ccompare :: Permission -> Permission -> Ordering compare :: Permission -> Permission -> Ordering $c< :: Permission -> Permission -> Bool < :: Permission -> Permission -> Bool $c<= :: Permission -> Permission -> Bool <= :: Permission -> Permission -> Bool $c> :: Permission -> Permission -> Bool > :: Permission -> Permission -> Bool $c>= :: Permission -> Permission -> Bool >= :: Permission -> Permission -> Bool $cmax :: Permission -> Permission -> Permission max :: Permission -> Permission -> Permission $cmin :: Permission -> Permission -> Permission min :: Permission -> Permission -> Permission Ord, ReadPrec [Permission] ReadPrec Permission Int -> ReadS Permission ReadS [Permission] (Int -> ReadS Permission) -> ReadS [Permission] -> ReadPrec Permission -> ReadPrec [Permission] -> Read Permission forall a. (Int -> ReadS a) -> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a $creadsPrec :: Int -> ReadS Permission readsPrec :: Int -> ReadS Permission $creadList :: ReadS [Permission] readList :: ReadS [Permission] $creadPrec :: ReadPrec Permission readPrec :: ReadPrec Permission $creadListPrec :: ReadPrec [Permission] readListPrec :: ReadPrec [Permission] Read, Int -> Permission -> ShowS [Permission] -> ShowS Permission -> [Char] (Int -> Permission -> ShowS) -> (Permission -> [Char]) -> ([Permission] -> ShowS) -> Show Permission forall a. (Int -> a -> ShowS) -> (a -> [Char]) -> ([a] -> ShowS) -> Show a $cshowsPrec :: Int -> Permission -> ShowS showsPrec :: Int -> Permission -> ShowS $cshow :: Permission -> [Char] show :: Permission -> [Char] $cshowList :: [Permission] -> ShowS showList :: [Permission] -> ShowS Show) deriving (Value -> Parser [Permission] Value -> Parser Permission (Value -> Parser Permission) -> (Value -> Parser [Permission]) -> FromJSON Permission forall a. (Value -> Parser a) -> (Value -> Parser [a]) -> FromJSON a $cparseJSON :: Value -> Parser Permission parseJSON :: Value -> Parser Permission $cparseJSONList :: Value -> Parser [Permission] parseJSONList :: Value -> Parser [Permission] A.FromJSON, [Permission] -> Value [Permission] -> Encoding Permission -> Value Permission -> Encoding (Permission -> Value) -> (Permission -> Encoding) -> ([Permission] -> Value) -> ([Permission] -> Encoding) -> ToJSON Permission forall a. (a -> Value) -> (a -> Encoding) -> ([a] -> Value) -> ([a] -> Encoding) -> ToJSON a $ctoJSON :: Permission -> Value toJSON :: Permission -> Value $ctoEncoding :: Permission -> Encoding toEncoding :: Permission -> Encoding $ctoJSONList :: [Permission] -> Value toJSONList :: [Permission] -> Value $ctoEncodingList :: [Permission] -> Encoding toEncodingList :: [Permission] -> Encoding A.ToJSON) via A.CustomJSON (JSONSettings "MkPermission" "") Permission type ErrorInsufficientPermission :: Permission -> Type data ErrorInsufficientPermission p = MkErrorInsufficientPermission deriving stock (ErrorInsufficientPermission p -> ErrorInsufficientPermission p -> Bool (ErrorInsufficientPermission p -> ErrorInsufficientPermission p -> Bool) -> (ErrorInsufficientPermission p -> ErrorInsufficientPermission p -> Bool) -> Eq (ErrorInsufficientPermission p) forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a forall (p :: Permission). ErrorInsufficientPermission p -> ErrorInsufficientPermission p -> Bool $c== :: forall (p :: Permission). ErrorInsufficientPermission p -> ErrorInsufficientPermission p -> Bool == :: ErrorInsufficientPermission p -> ErrorInsufficientPermission p -> Bool $c/= :: forall (p :: Permission). ErrorInsufficientPermission p -> ErrorInsufficientPermission p -> Bool /= :: ErrorInsufficientPermission p -> ErrorInsufficientPermission p -> Bool Eq, (forall x. ErrorInsufficientPermission p -> Rep (ErrorInsufficientPermission p) x) -> (forall x. Rep (ErrorInsufficientPermission p) x -> ErrorInsufficientPermission p) -> Generic (ErrorInsufficientPermission p) forall x. Rep (ErrorInsufficientPermission p) x -> ErrorInsufficientPermission p forall x. ErrorInsufficientPermission p -> Rep (ErrorInsufficientPermission p) x forall a. (forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a forall (p :: Permission) x. Rep (ErrorInsufficientPermission p) x -> ErrorInsufficientPermission p forall (p :: Permission) x. ErrorInsufficientPermission p -> Rep (ErrorInsufficientPermission p) x $cfrom :: forall (p :: Permission) x. ErrorInsufficientPermission p -> Rep (ErrorInsufficientPermission p) x from :: forall x. ErrorInsufficientPermission p -> Rep (ErrorInsufficientPermission p) x $cto :: forall (p :: Permission) x. Rep (ErrorInsufficientPermission p) x -> ErrorInsufficientPermission p to :: forall x. Rep (ErrorInsufficientPermission p) x -> ErrorInsufficientPermission p Generic, Eq (ErrorInsufficientPermission p) Eq (ErrorInsufficientPermission p) => (ErrorInsufficientPermission p -> ErrorInsufficientPermission p -> Ordering) -> (ErrorInsufficientPermission p -> ErrorInsufficientPermission p -> Bool) -> (ErrorInsufficientPermission p -> ErrorInsufficientPermission p -> Bool) -> (ErrorInsufficientPermission p -> ErrorInsufficientPermission p -> Bool) -> (ErrorInsufficientPermission p -> ErrorInsufficientPermission p -> Bool) -> (ErrorInsufficientPermission p -> ErrorInsufficientPermission p -> ErrorInsufficientPermission p) -> (ErrorInsufficientPermission p -> ErrorInsufficientPermission p -> ErrorInsufficientPermission p) -> Ord (ErrorInsufficientPermission p) ErrorInsufficientPermission p -> ErrorInsufficientPermission p -> Bool ErrorInsufficientPermission p -> ErrorInsufficientPermission p -> Ordering ErrorInsufficientPermission p -> ErrorInsufficientPermission p -> ErrorInsufficientPermission p forall a. Eq a => (a -> a -> Ordering) -> (a -> a -> Bool) -> (a -> a -> Bool) -> (a -> a -> Bool) -> (a -> a -> Bool) -> (a -> a -> a) -> (a -> a -> a) -> Ord a forall (p :: Permission). Eq (ErrorInsufficientPermission p) forall (p :: Permission). ErrorInsufficientPermission p -> ErrorInsufficientPermission p -> Bool forall (p :: Permission). ErrorInsufficientPermission p -> ErrorInsufficientPermission p -> Ordering forall (p :: Permission). ErrorInsufficientPermission p -> ErrorInsufficientPermission p -> ErrorInsufficientPermission p $ccompare :: forall (p :: Permission). ErrorInsufficientPermission p -> ErrorInsufficientPermission p -> Ordering compare :: ErrorInsufficientPermission p -> ErrorInsufficientPermission p -> Ordering $c< :: forall (p :: Permission). ErrorInsufficientPermission p -> ErrorInsufficientPermission p -> Bool < :: ErrorInsufficientPermission p -> ErrorInsufficientPermission p -> Bool $c<= :: forall (p :: Permission). ErrorInsufficientPermission p -> ErrorInsufficientPermission p -> Bool <= :: ErrorInsufficientPermission p -> ErrorInsufficientPermission p -> Bool $c> :: forall (p :: Permission). ErrorInsufficientPermission p -> ErrorInsufficientPermission p -> Bool > :: ErrorInsufficientPermission p -> ErrorInsufficientPermission p -> Bool $c>= :: forall (p :: Permission). ErrorInsufficientPermission p -> ErrorInsufficientPermission p -> Bool >= :: ErrorInsufficientPermission p -> ErrorInsufficientPermission p -> Bool $cmax :: forall (p :: Permission). ErrorInsufficientPermission p -> ErrorInsufficientPermission p -> ErrorInsufficientPermission p max :: ErrorInsufficientPermission p -> ErrorInsufficientPermission p -> ErrorInsufficientPermission p $cmin :: forall (p :: Permission). ErrorInsufficientPermission p -> ErrorInsufficientPermission p -> ErrorInsufficientPermission p min :: ErrorInsufficientPermission p -> ErrorInsufficientPermission p -> ErrorInsufficientPermission p Ord, ReadPrec [ErrorInsufficientPermission p] ReadPrec (ErrorInsufficientPermission p) Int -> ReadS (ErrorInsufficientPermission p) ReadS [ErrorInsufficientPermission p] (Int -> ReadS (ErrorInsufficientPermission p)) -> ReadS [ErrorInsufficientPermission p] -> ReadPrec (ErrorInsufficientPermission p) -> ReadPrec [ErrorInsufficientPermission p] -> Read (ErrorInsufficientPermission p) forall a. (Int -> ReadS a) -> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a forall (p :: Permission). ReadPrec [ErrorInsufficientPermission p] forall (p :: Permission). ReadPrec (ErrorInsufficientPermission p) forall (p :: Permission). Int -> ReadS (ErrorInsufficientPermission p) forall (p :: Permission). ReadS [ErrorInsufficientPermission p] $creadsPrec :: forall (p :: Permission). Int -> ReadS (ErrorInsufficientPermission p) readsPrec :: Int -> ReadS (ErrorInsufficientPermission p) $creadList :: forall (p :: Permission). ReadS [ErrorInsufficientPermission p] readList :: ReadS [ErrorInsufficientPermission p] $creadPrec :: forall (p :: Permission). ReadPrec (ErrorInsufficientPermission p) readPrec :: ReadPrec (ErrorInsufficientPermission p) $creadListPrec :: forall (p :: Permission). ReadPrec [ErrorInsufficientPermission p] readListPrec :: ReadPrec [ErrorInsufficientPermission p] Read, Int -> ErrorInsufficientPermission p -> ShowS [ErrorInsufficientPermission p] -> ShowS ErrorInsufficientPermission p -> [Char] (Int -> ErrorInsufficientPermission p -> ShowS) -> (ErrorInsufficientPermission p -> [Char]) -> ([ErrorInsufficientPermission p] -> ShowS) -> Show (ErrorInsufficientPermission p) forall a. (Int -> a -> ShowS) -> (a -> [Char]) -> ([a] -> ShowS) -> Show a forall (p :: Permission). Int -> ErrorInsufficientPermission p -> ShowS forall (p :: Permission). [ErrorInsufficientPermission p] -> ShowS forall (p :: Permission). ErrorInsufficientPermission p -> [Char] $cshowsPrec :: forall (p :: Permission). Int -> ErrorInsufficientPermission p -> ShowS showsPrec :: Int -> ErrorInsufficientPermission p -> ShowS $cshow :: forall (p :: Permission). ErrorInsufficientPermission p -> [Char] show :: ErrorInsufficientPermission p -> [Char] $cshowList :: forall (p :: Permission). [ErrorInsufficientPermission p] -> ShowS showList :: [ErrorInsufficientPermission p] -> ShowS Show) instance Typeable p => A.FromJSON (ErrorInsufficientPermission p) where parseJSON :: Value -> Parser (ErrorInsufficientPermission p) parseJSON = [Char] -> (Text -> Parser (ErrorInsufficientPermission p)) -> Value -> Parser (ErrorInsufficientPermission p) forall a. [Char] -> (Text -> Parser a) -> Value -> Parser a A.withText [Char] errorName ((Text -> Parser (ErrorInsufficientPermission p)) -> Value -> Parser (ErrorInsufficientPermission p)) -> (Text -> Parser (ErrorInsufficientPermission p)) -> Value -> Parser (ErrorInsufficientPermission p) forall a b. (a -> b) -> a -> b $ \Text text -> case Text -> Text -> Maybe Text T.stripPrefix Text "Insufficient permission: " Text text of Maybe Text Nothing -> [Char] -> Parser (ErrorInsufficientPermission p) forall a. [Char] -> Parser a forall (m :: * -> *) a. MonadFail m => [Char] -> m a fail ([Char] -> Parser (ErrorInsufficientPermission p)) -> [Char] -> Parser (ErrorInsufficientPermission p) forall a b. (a -> b) -> a -> b $ [Char] "Parsing " [Char] -> ShowS forall a. [a] -> [a] -> [a] ++ [Char] errorName [Char] -> ShowS forall a. [a] -> [a] -> [a] ++ [Char] "failed, expected prefix \"Insufficient permission: \"" Just Text suffix -> if Text -> [Char] T.unpack Text suffix [Char] -> [Char] -> Bool forall a. Eq a => a -> a -> Bool == [Char] permissionName then ErrorInsufficientPermission p -> Parser (ErrorInsufficientPermission p) forall a. a -> Parser a forall (f :: * -> *) a. Applicative f => a -> f a pure ErrorInsufficientPermission p forall (p :: Permission). ErrorInsufficientPermission p MkErrorInsufficientPermission else [Char] -> Parser (ErrorInsufficientPermission p) forall a. [Char] -> Parser a forall (m :: * -> *) a. MonadFail m => [Char] -> m a fail ([Char] -> Parser (ErrorInsufficientPermission p)) -> [Char] -> Parser (ErrorInsufficientPermission p) forall a b. (a -> b) -> a -> b $ [Char] "Parsing " [Char] -> ShowS forall a. [a] -> [a] -> [a] ++ [Char] errorName [Char] -> ShowS forall a. [a] -> [a] -> [a] ++ [Char] "failed, expected suffix \"" [Char] -> ShowS forall a. [a] -> [a] -> [a] ++ [Char] permissionName [Char] -> ShowS forall a. [a] -> [a] -> [a] ++ [Char] "\"" where errorName :: [Char] errorName = TyCon -> [Char] tyConName (TypeRep -> TyCon typeRepTyCon (Proxy (ErrorInsufficientPermission p) -> TypeRep forall {k} (proxy :: k -> *) (a :: k). Typeable a => proxy a -> TypeRep typeRep (Proxy (ErrorInsufficientPermission p) -> TypeRep) -> Proxy (ErrorInsufficientPermission p) -> TypeRep forall a b. (a -> b) -> a -> b $ forall t. Proxy t forall {k} (t :: k). Proxy t Proxy @(ErrorInsufficientPermission p))) permissionName :: [Char] permissionName = TyCon -> [Char] tyConName (TypeRep -> TyCon typeRepTyCon (Proxy p -> TypeRep forall {k} (proxy :: k -> *) (a :: k). Typeable a => proxy a -> TypeRep typeRep (Proxy p -> TypeRep) -> Proxy p -> TypeRep forall a b. (a -> b) -> a -> b $ forall {k} (t :: k). Proxy t forall (t :: Permission). Proxy t Proxy @p)) instance Typeable p => A.ToJSON (ErrorInsufficientPermission p) where toJSON :: ErrorInsufficientPermission p -> Value toJSON ErrorInsufficientPermission p MkErrorInsufficientPermission = Text -> Value A.String (Text -> Value) -> Text -> Value forall a b. (a -> b) -> a -> b $ [Char] -> Text T.pack ([Char] -> Text) -> [Char] -> Text forall a b. (a -> b) -> a -> b $ [Char] "Insufficient permission: " [Char] -> ShowS forall a. [a] -> [a] -> [a] ++ [Char] permissionName where permissionName :: [Char] permissionName = TyCon -> [Char] tyConName (TypeRep -> TyCon typeRepTyCon (Proxy p -> TypeRep forall {k} (proxy :: k -> *) (a :: k). Typeable a => proxy a -> TypeRep typeRep (Proxy p -> TypeRep) -> Proxy p -> TypeRep forall a b. (a -> b) -> a -> b $ forall {k} (t :: k). Proxy t forall (t :: Permission). Proxy t Proxy @p)) genSingletons [''Permission]