module Mensam.API.Order where

import Mensam.API.Aeson

import Data.Aeson qualified as A
import Data.Kind
import Deriving.Aeson qualified as A
import GHC.Generics

type Order :: Type
data Order = Ascending | Descending
  deriving stock (Order
Order -> Order -> Bounded Order
forall a. a -> a -> Bounded a
$cminBound :: Order
minBound :: Order
$cmaxBound :: Order
maxBound :: Order
Bounded, Int -> Order
Order -> Int
Order -> [Order]
Order -> Order
Order -> Order -> [Order]
Order -> Order -> Order -> [Order]
(Order -> Order)
-> (Order -> Order)
-> (Int -> Order)
-> (Order -> Int)
-> (Order -> [Order])
-> (Order -> Order -> [Order])
-> (Order -> Order -> [Order])
-> (Order -> Order -> Order -> [Order])
-> Enum Order
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 :: Order -> Order
succ :: Order -> Order
$cpred :: Order -> Order
pred :: Order -> Order
$ctoEnum :: Int -> Order
toEnum :: Int -> Order
$cfromEnum :: Order -> Int
fromEnum :: Order -> Int
$cenumFrom :: Order -> [Order]
enumFrom :: Order -> [Order]
$cenumFromThen :: Order -> Order -> [Order]
enumFromThen :: Order -> Order -> [Order]
$cenumFromTo :: Order -> Order -> [Order]
enumFromTo :: Order -> Order -> [Order]
$cenumFromThenTo :: Order -> Order -> Order -> [Order]
enumFromThenTo :: Order -> Order -> Order -> [Order]
Enum, Order -> Order -> Bool
(Order -> Order -> Bool) -> (Order -> Order -> Bool) -> Eq Order
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
$c== :: Order -> Order -> Bool
== :: Order -> Order -> Bool
$c/= :: Order -> Order -> Bool
/= :: Order -> Order -> Bool
Eq, (forall x. Order -> Rep Order x)
-> (forall x. Rep Order x -> Order) -> Generic Order
forall x. Rep Order x -> Order
forall x. Order -> Rep Order x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cfrom :: forall x. Order -> Rep Order x
from :: forall x. Order -> Rep Order x
$cto :: forall x. Rep Order x -> Order
to :: forall x. Rep Order x -> Order
Generic, Eq Order
Eq Order =>
(Order -> Order -> Ordering)
-> (Order -> Order -> Bool)
-> (Order -> Order -> Bool)
-> (Order -> Order -> Bool)
-> (Order -> Order -> Bool)
-> (Order -> Order -> Order)
-> (Order -> Order -> Order)
-> Ord Order
Order -> Order -> Bool
Order -> Order -> Ordering
Order -> Order -> Order
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 :: Order -> Order -> Ordering
compare :: Order -> Order -> Ordering
$c< :: Order -> Order -> Bool
< :: Order -> Order -> Bool
$c<= :: Order -> Order -> Bool
<= :: Order -> Order -> Bool
$c> :: Order -> Order -> Bool
> :: Order -> Order -> Bool
$c>= :: Order -> Order -> Bool
>= :: Order -> Order -> Bool
$cmax :: Order -> Order -> Order
max :: Order -> Order -> Order
$cmin :: Order -> Order -> Order
min :: Order -> Order -> Order
Ord, ReadPrec [Order]
ReadPrec Order
Int -> ReadS Order
ReadS [Order]
(Int -> ReadS Order)
-> ReadS [Order]
-> ReadPrec Order
-> ReadPrec [Order]
-> Read Order
forall a.
(Int -> ReadS a)
-> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
$creadsPrec :: Int -> ReadS Order
readsPrec :: Int -> ReadS Order
$creadList :: ReadS [Order]
readList :: ReadS [Order]
$creadPrec :: ReadPrec Order
readPrec :: ReadPrec Order
$creadListPrec :: ReadPrec [Order]
readListPrec :: ReadPrec [Order]
Read, Int -> Order -> ShowS
[Order] -> ShowS
Order -> [Char]
(Int -> Order -> ShowS)
-> (Order -> [Char]) -> ([Order] -> ShowS) -> Show Order
forall a.
(Int -> a -> ShowS) -> (a -> [Char]) -> ([a] -> ShowS) -> Show a
$cshowsPrec :: Int -> Order -> ShowS
showsPrec :: Int -> Order -> ShowS
$cshow :: Order -> [Char]
show :: Order -> [Char]
$cshowList :: [Order] -> ShowS
showList :: [Order] -> ShowS
Show)
  deriving
    (Value -> Parser [Order]
Value -> Parser Order
(Value -> Parser Order)
-> (Value -> Parser [Order]) -> FromJSON Order
forall a.
(Value -> Parser a) -> (Value -> Parser [a]) -> FromJSON a
$cparseJSON :: Value -> Parser Order
parseJSON :: Value -> Parser Order
$cparseJSONList :: Value -> Parser [Order]
parseJSONList :: Value -> Parser [Order]
A.FromJSON, [Order] -> Value
[Order] -> Encoding
Order -> Value
Order -> Encoding
(Order -> Value)
-> (Order -> Encoding)
-> ([Order] -> Value)
-> ([Order] -> Encoding)
-> ToJSON Order
forall a.
(a -> Value)
-> (a -> Encoding)
-> ([a] -> Value)
-> ([a] -> Encoding)
-> ToJSON a
$ctoJSON :: Order -> Value
toJSON :: Order -> Value
$ctoEncoding :: Order -> Encoding
toEncoding :: Order -> Encoding
$ctoJSONList :: [Order] -> Value
toJSONList :: [Order] -> Value
$ctoEncodingList :: [Order] -> Encoding
toEncodingList :: [Order] -> Encoding
A.ToJSON)
    via A.CustomJSON (JSONSettings "" "") Order

type OrderByCategory :: Type -> Type
data OrderByCategory a = MkOrderByCategory
  { forall a. OrderByCategory a -> a
orderByCategoryCategory :: a
  , forall a. OrderByCategory a -> Order
orderByCategoryOrder :: Order
  }
  deriving stock (OrderByCategory a -> OrderByCategory a -> Bool
(OrderByCategory a -> OrderByCategory a -> Bool)
-> (OrderByCategory a -> OrderByCategory a -> Bool)
-> Eq (OrderByCategory a)
forall a. Eq a => OrderByCategory a -> OrderByCategory a -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
$c== :: forall a. Eq a => OrderByCategory a -> OrderByCategory a -> Bool
== :: OrderByCategory a -> OrderByCategory a -> Bool
$c/= :: forall a. Eq a => OrderByCategory a -> OrderByCategory a -> Bool
/= :: OrderByCategory a -> OrderByCategory a -> Bool
Eq, (forall x. OrderByCategory a -> Rep (OrderByCategory a) x)
-> (forall x. Rep (OrderByCategory a) x -> OrderByCategory a)
-> Generic (OrderByCategory a)
forall x. Rep (OrderByCategory a) x -> OrderByCategory a
forall x. OrderByCategory a -> Rep (OrderByCategory a) x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
forall a x. Rep (OrderByCategory a) x -> OrderByCategory a
forall a x. OrderByCategory a -> Rep (OrderByCategory a) x
$cfrom :: forall a x. OrderByCategory a -> Rep (OrderByCategory a) x
from :: forall x. OrderByCategory a -> Rep (OrderByCategory a) x
$cto :: forall a x. Rep (OrderByCategory a) x -> OrderByCategory a
to :: forall x. Rep (OrderByCategory a) x -> OrderByCategory a
Generic, Eq (OrderByCategory a)
Eq (OrderByCategory a) =>
(OrderByCategory a -> OrderByCategory a -> Ordering)
-> (OrderByCategory a -> OrderByCategory a -> Bool)
-> (OrderByCategory a -> OrderByCategory a -> Bool)
-> (OrderByCategory a -> OrderByCategory a -> Bool)
-> (OrderByCategory a -> OrderByCategory a -> Bool)
-> (OrderByCategory a -> OrderByCategory a -> OrderByCategory a)
-> (OrderByCategory a -> OrderByCategory a -> OrderByCategory a)
-> Ord (OrderByCategory a)
OrderByCategory a -> OrderByCategory a -> Bool
OrderByCategory a -> OrderByCategory a -> Ordering
OrderByCategory a -> OrderByCategory a -> OrderByCategory a
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 a. Ord a => Eq (OrderByCategory a)
forall a. Ord a => OrderByCategory a -> OrderByCategory a -> Bool
forall a.
Ord a =>
OrderByCategory a -> OrderByCategory a -> Ordering
forall a.
Ord a =>
OrderByCategory a -> OrderByCategory a -> OrderByCategory a
$ccompare :: forall a.
Ord a =>
OrderByCategory a -> OrderByCategory a -> Ordering
compare :: OrderByCategory a -> OrderByCategory a -> Ordering
$c< :: forall a. Ord a => OrderByCategory a -> OrderByCategory a -> Bool
< :: OrderByCategory a -> OrderByCategory a -> Bool
$c<= :: forall a. Ord a => OrderByCategory a -> OrderByCategory a -> Bool
<= :: OrderByCategory a -> OrderByCategory a -> Bool
$c> :: forall a. Ord a => OrderByCategory a -> OrderByCategory a -> Bool
> :: OrderByCategory a -> OrderByCategory a -> Bool
$c>= :: forall a. Ord a => OrderByCategory a -> OrderByCategory a -> Bool
>= :: OrderByCategory a -> OrderByCategory a -> Bool
$cmax :: forall a.
Ord a =>
OrderByCategory a -> OrderByCategory a -> OrderByCategory a
max :: OrderByCategory a -> OrderByCategory a -> OrderByCategory a
$cmin :: forall a.
Ord a =>
OrderByCategory a -> OrderByCategory a -> OrderByCategory a
min :: OrderByCategory a -> OrderByCategory a -> OrderByCategory a
Ord, ReadPrec [OrderByCategory a]
ReadPrec (OrderByCategory a)
Int -> ReadS (OrderByCategory a)
ReadS [OrderByCategory a]
(Int -> ReadS (OrderByCategory a))
-> ReadS [OrderByCategory a]
-> ReadPrec (OrderByCategory a)
-> ReadPrec [OrderByCategory a]
-> Read (OrderByCategory a)
forall a. Read a => ReadPrec [OrderByCategory a]
forall a. Read a => ReadPrec (OrderByCategory a)
forall a. Read a => Int -> ReadS (OrderByCategory a)
forall a. Read a => ReadS [OrderByCategory a]
forall a.
(Int -> ReadS a)
-> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
$creadsPrec :: forall a. Read a => Int -> ReadS (OrderByCategory a)
readsPrec :: Int -> ReadS (OrderByCategory a)
$creadList :: forall a. Read a => ReadS [OrderByCategory a]
readList :: ReadS [OrderByCategory a]
$creadPrec :: forall a. Read a => ReadPrec (OrderByCategory a)
readPrec :: ReadPrec (OrderByCategory a)
$creadListPrec :: forall a. Read a => ReadPrec [OrderByCategory a]
readListPrec :: ReadPrec [OrderByCategory a]
Read, Int -> OrderByCategory a -> ShowS
[OrderByCategory a] -> ShowS
OrderByCategory a -> [Char]
(Int -> OrderByCategory a -> ShowS)
-> (OrderByCategory a -> [Char])
-> ([OrderByCategory a] -> ShowS)
-> Show (OrderByCategory a)
forall a. Show a => Int -> OrderByCategory a -> ShowS
forall a. Show a => [OrderByCategory a] -> ShowS
forall a. Show a => OrderByCategory a -> [Char]
forall a.
(Int -> a -> ShowS) -> (a -> [Char]) -> ([a] -> ShowS) -> Show a
$cshowsPrec :: forall a. Show a => Int -> OrderByCategory a -> ShowS
showsPrec :: Int -> OrderByCategory a -> ShowS
$cshow :: forall a. Show a => OrderByCategory a -> [Char]
show :: OrderByCategory a -> [Char]
$cshowList :: forall a. Show a => [OrderByCategory a] -> ShowS
showList :: [OrderByCategory a] -> ShowS
Show)
  deriving
    (Value -> Parser [OrderByCategory a]
Value -> Parser (OrderByCategory a)
(Value -> Parser (OrderByCategory a))
-> (Value -> Parser [OrderByCategory a])
-> FromJSON (OrderByCategory a)
forall a. FromJSON a => Value -> Parser [OrderByCategory a]
forall a. FromJSON a => Value -> Parser (OrderByCategory a)
forall a.
(Value -> Parser a) -> (Value -> Parser [a]) -> FromJSON a
$cparseJSON :: forall a. FromJSON a => Value -> Parser (OrderByCategory a)
parseJSON :: Value -> Parser (OrderByCategory a)
$cparseJSONList :: forall a. FromJSON a => Value -> Parser [OrderByCategory a]
parseJSONList :: Value -> Parser [OrderByCategory a]
A.FromJSON, [OrderByCategory a] -> Value
[OrderByCategory a] -> Encoding
OrderByCategory a -> Value
OrderByCategory a -> Encoding
(OrderByCategory a -> Value)
-> (OrderByCategory a -> Encoding)
-> ([OrderByCategory a] -> Value)
-> ([OrderByCategory a] -> Encoding)
-> ToJSON (OrderByCategory a)
forall a. ToJSON a => [OrderByCategory a] -> Value
forall a. ToJSON a => [OrderByCategory a] -> Encoding
forall a. ToJSON a => OrderByCategory a -> Value
forall a. ToJSON a => OrderByCategory a -> Encoding
forall a.
(a -> Value)
-> (a -> Encoding)
-> ([a] -> Value)
-> ([a] -> Encoding)
-> ToJSON a
$ctoJSON :: forall a. ToJSON a => OrderByCategory a -> Value
toJSON :: OrderByCategory a -> Value
$ctoEncoding :: forall a. ToJSON a => OrderByCategory a -> Encoding
toEncoding :: OrderByCategory a -> Encoding
$ctoJSONList :: forall a. ToJSON a => [OrderByCategory a] -> Value
toJSONList :: [OrderByCategory a] -> Value
$ctoEncodingList :: forall a. ToJSON a => [OrderByCategory a] -> Encoding
toEncodingList :: [OrderByCategory a] -> Encoding
A.ToJSON)
    via A.CustomJSON (JSONSettings "Mk" "orderByCategory") (OrderByCategory a)

type OrderByCategories :: Type -> Type
newtype OrderByCategories a = MkOrderByCategories {forall a. OrderByCategories a -> [OrderByCategory a]
unOrderByCategories :: [OrderByCategory a]}
  deriving stock (OrderByCategories a -> OrderByCategories a -> Bool
(OrderByCategories a -> OrderByCategories a -> Bool)
-> (OrderByCategories a -> OrderByCategories a -> Bool)
-> Eq (OrderByCategories a)
forall a.
Eq a =>
OrderByCategories a -> OrderByCategories a -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
$c== :: forall a.
Eq a =>
OrderByCategories a -> OrderByCategories a -> Bool
== :: OrderByCategories a -> OrderByCategories a -> Bool
$c/= :: forall a.
Eq a =>
OrderByCategories a -> OrderByCategories a -> Bool
/= :: OrderByCategories a -> OrderByCategories a -> Bool
Eq, (forall x. OrderByCategories a -> Rep (OrderByCategories a) x)
-> (forall x. Rep (OrderByCategories a) x -> OrderByCategories a)
-> Generic (OrderByCategories a)
forall x. Rep (OrderByCategories a) x -> OrderByCategories a
forall x. OrderByCategories a -> Rep (OrderByCategories a) x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
forall a x. Rep (OrderByCategories a) x -> OrderByCategories a
forall a x. OrderByCategories a -> Rep (OrderByCategories a) x
$cfrom :: forall a x. OrderByCategories a -> Rep (OrderByCategories a) x
from :: forall x. OrderByCategories a -> Rep (OrderByCategories a) x
$cto :: forall a x. Rep (OrderByCategories a) x -> OrderByCategories a
to :: forall x. Rep (OrderByCategories a) x -> OrderByCategories a
Generic, Eq (OrderByCategories a)
Eq (OrderByCategories a) =>
(OrderByCategories a -> OrderByCategories a -> Ordering)
-> (OrderByCategories a -> OrderByCategories a -> Bool)
-> (OrderByCategories a -> OrderByCategories a -> Bool)
-> (OrderByCategories a -> OrderByCategories a -> Bool)
-> (OrderByCategories a -> OrderByCategories a -> Bool)
-> (OrderByCategories a
    -> OrderByCategories a -> OrderByCategories a)
-> (OrderByCategories a
    -> OrderByCategories a -> OrderByCategories a)
-> Ord (OrderByCategories a)
OrderByCategories a -> OrderByCategories a -> Bool
OrderByCategories a -> OrderByCategories a -> Ordering
OrderByCategories a -> OrderByCategories a -> OrderByCategories a
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 a. Ord a => Eq (OrderByCategories a)
forall a.
Ord a =>
OrderByCategories a -> OrderByCategories a -> Bool
forall a.
Ord a =>
OrderByCategories a -> OrderByCategories a -> Ordering
forall a.
Ord a =>
OrderByCategories a -> OrderByCategories a -> OrderByCategories a
$ccompare :: forall a.
Ord a =>
OrderByCategories a -> OrderByCategories a -> Ordering
compare :: OrderByCategories a -> OrderByCategories a -> Ordering
$c< :: forall a.
Ord a =>
OrderByCategories a -> OrderByCategories a -> Bool
< :: OrderByCategories a -> OrderByCategories a -> Bool
$c<= :: forall a.
Ord a =>
OrderByCategories a -> OrderByCategories a -> Bool
<= :: OrderByCategories a -> OrderByCategories a -> Bool
$c> :: forall a.
Ord a =>
OrderByCategories a -> OrderByCategories a -> Bool
> :: OrderByCategories a -> OrderByCategories a -> Bool
$c>= :: forall a.
Ord a =>
OrderByCategories a -> OrderByCategories a -> Bool
>= :: OrderByCategories a -> OrderByCategories a -> Bool
$cmax :: forall a.
Ord a =>
OrderByCategories a -> OrderByCategories a -> OrderByCategories a
max :: OrderByCategories a -> OrderByCategories a -> OrderByCategories a
$cmin :: forall a.
Ord a =>
OrderByCategories a -> OrderByCategories a -> OrderByCategories a
min :: OrderByCategories a -> OrderByCategories a -> OrderByCategories a
Ord, ReadPrec [OrderByCategories a]
ReadPrec (OrderByCategories a)
Int -> ReadS (OrderByCategories a)
ReadS [OrderByCategories a]
(Int -> ReadS (OrderByCategories a))
-> ReadS [OrderByCategories a]
-> ReadPrec (OrderByCategories a)
-> ReadPrec [OrderByCategories a]
-> Read (OrderByCategories a)
forall a. Read a => ReadPrec [OrderByCategories a]
forall a. Read a => ReadPrec (OrderByCategories a)
forall a. Read a => Int -> ReadS (OrderByCategories a)
forall a. Read a => ReadS [OrderByCategories a]
forall a.
(Int -> ReadS a)
-> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
$creadsPrec :: forall a. Read a => Int -> ReadS (OrderByCategories a)
readsPrec :: Int -> ReadS (OrderByCategories a)
$creadList :: forall a. Read a => ReadS [OrderByCategories a]
readList :: ReadS [OrderByCategories a]
$creadPrec :: forall a. Read a => ReadPrec (OrderByCategories a)
readPrec :: ReadPrec (OrderByCategories a)
$creadListPrec :: forall a. Read a => ReadPrec [OrderByCategories a]
readListPrec :: ReadPrec [OrderByCategories a]
Read, Int -> OrderByCategories a -> ShowS
[OrderByCategories a] -> ShowS
OrderByCategories a -> [Char]
(Int -> OrderByCategories a -> ShowS)
-> (OrderByCategories a -> [Char])
-> ([OrderByCategories a] -> ShowS)
-> Show (OrderByCategories a)
forall a. Show a => Int -> OrderByCategories a -> ShowS
forall a. Show a => [OrderByCategories a] -> ShowS
forall a. Show a => OrderByCategories a -> [Char]
forall a.
(Int -> a -> ShowS) -> (a -> [Char]) -> ([a] -> ShowS) -> Show a
$cshowsPrec :: forall a. Show a => Int -> OrderByCategories a -> ShowS
showsPrec :: Int -> OrderByCategories a -> ShowS
$cshow :: forall a. Show a => OrderByCategories a -> [Char]
show :: OrderByCategories a -> [Char]
$cshowList :: forall a. Show a => [OrderByCategories a] -> ShowS
showList :: [OrderByCategories a] -> ShowS
Show)
  deriving newtype (Value -> Parser [OrderByCategories a]
Value -> Parser (OrderByCategories a)
(Value -> Parser (OrderByCategories a))
-> (Value -> Parser [OrderByCategories a])
-> FromJSON (OrderByCategories a)
forall a. FromJSON a => Value -> Parser [OrderByCategories a]
forall a. FromJSON a => Value -> Parser (OrderByCategories a)
forall a.
(Value -> Parser a) -> (Value -> Parser [a]) -> FromJSON a
$cparseJSON :: forall a. FromJSON a => Value -> Parser (OrderByCategories a)
parseJSON :: Value -> Parser (OrderByCategories a)
$cparseJSONList :: forall a. FromJSON a => Value -> Parser [OrderByCategories a]
parseJSONList :: Value -> Parser [OrderByCategories a]
A.FromJSON, [OrderByCategories a] -> Value
[OrderByCategories a] -> Encoding
OrderByCategories a -> Value
OrderByCategories a -> Encoding
(OrderByCategories a -> Value)
-> (OrderByCategories a -> Encoding)
-> ([OrderByCategories a] -> Value)
-> ([OrderByCategories a] -> Encoding)
-> ToJSON (OrderByCategories a)
forall a. ToJSON a => [OrderByCategories a] -> Value
forall a. ToJSON a => [OrderByCategories a] -> Encoding
forall a. ToJSON a => OrderByCategories a -> Value
forall a. ToJSON a => OrderByCategories a -> Encoding
forall a.
(a -> Value)
-> (a -> Encoding)
-> ([a] -> Value)
-> ([a] -> Encoding)
-> ToJSON a
$ctoJSON :: forall a. ToJSON a => OrderByCategories a -> Value
toJSON :: OrderByCategories a -> Value
$ctoEncoding :: forall a. ToJSON a => OrderByCategories a -> Encoding
toEncoding :: OrderByCategories a -> Encoding
$ctoJSONList :: forall a. ToJSON a => [OrderByCategories a] -> Value
toJSONList :: [OrderByCategories a] -> Value
$ctoEncodingList :: forall a. ToJSON a => [OrderByCategories a] -> Encoding
toEncodingList :: [OrderByCategories a] -> Encoding
A.ToJSON)