module CookieTray.Command.Many where

import CookieTray (Action (..), Expiring (Expiring), Expiry, Meta (..), Named (..), ToCommandList (..), Tray, Value)
import CookieTray qualified
import CookieTray.Command (Command (Command))
import CookieTray.Command qualified as Command
import Data.Functor ((<&>))
import Prelude (Eq, Ord, Show)

data Many = Many
  { Many -> Tray (Action Value)
tray :: Tray (Action Value),
    Many -> Expiry
expiry :: Expiry,
    Many -> Meta
meta :: Meta
  }
  deriving (Many -> Many -> Bool
(Many -> Many -> Bool) -> (Many -> Many -> Bool) -> Eq Many
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
$c== :: Many -> Many -> Bool
== :: Many -> Many -> Bool
$c/= :: Many -> Many -> Bool
/= :: Many -> Many -> Bool
Eq, Eq Many
Eq Many =>
(Many -> Many -> Ordering)
-> (Many -> Many -> Bool)
-> (Many -> Many -> Bool)
-> (Many -> Many -> Bool)
-> (Many -> Many -> Bool)
-> (Many -> Many -> Many)
-> (Many -> Many -> Many)
-> Ord Many
Many -> Many -> Bool
Many -> Many -> Ordering
Many -> Many -> Many
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 :: Many -> Many -> Ordering
compare :: Many -> Many -> Ordering
$c< :: Many -> Many -> Bool
< :: Many -> Many -> Bool
$c<= :: Many -> Many -> Bool
<= :: Many -> Many -> Bool
$c> :: Many -> Many -> Bool
> :: Many -> Many -> Bool
$c>= :: Many -> Many -> Bool
>= :: Many -> Many -> Bool
$cmax :: Many -> Many -> Many
max :: Many -> Many -> Many
$cmin :: Many -> Many -> Many
min :: Many -> Many -> Many
Ord, Int -> Many -> ShowS
[Many] -> ShowS
Many -> String
(Int -> Many -> ShowS)
-> (Many -> String) -> ([Many] -> ShowS) -> Show Many
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
$cshowsPrec :: Int -> Many -> ShowS
showsPrec :: Int -> Many -> ShowS
$cshow :: Many -> String
show :: Many -> String
$cshowList :: [Many] -> ShowS
showList :: [Many] -> ShowS
Show)

instance ToCommandList Many where
  toCommandList :: Many -> [Command]
toCommandList Many
x =
    Tray (Action Value) -> [Named (Action Value)]
forall a. Tray a -> [Named a]
CookieTray.toList (Many -> Tray (Action Value)
tray Many
x) [Named (Action Value)]
-> (Named (Action Value) -> Command) -> [Command]
forall (f :: * -> *) a b. Functor f => f a -> (a -> b) -> f b
<&> \Named (Action Value)
y ->
      Command
        { name :: Name
Command.name = Named (Action Value) -> Name
forall a. Named a -> Name
CookieTray.name Named (Action Value)
y,
          meta :: Meta
Command.meta = Many -> Meta
meta Many
x,
          action :: Action (Expiring Value)
Command.action =
            Named (Action Value) -> Action Value
forall a. Named a -> a
value Named (Action Value)
y Action Value
-> (Value -> Expiring Value) -> Action (Expiring Value)
forall (f :: * -> *) a b. Functor f => f a -> (a -> b) -> f b
<&> \Value
z ->
              Expiring
                { expiring :: Value
CookieTray.expiring = Value
z,
                  expiry :: Expiry
CookieTray.expiry = Many -> Expiry
expiry Many
x
                }
        }