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
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: Many -> Many -> Bool
$c/= :: Many -> Many -> Bool
== :: Many -> Many -> Bool
$c== :: Many -> Many -> Bool
Eq, Eq 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
min :: Many -> Many -> Many
$cmin :: Many -> Many -> Many
max :: Many -> Many -> Many
$cmax :: Many -> Many -> Many
>= :: Many -> Many -> Bool
$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
compare :: Many -> Many -> Ordering
$ccompare :: Many -> Many -> Ordering
Ord, Int -> Many -> ShowS
[Many] -> ShowS
Many -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [Many] -> ShowS
$cshowList :: [Many] -> ShowS
show :: Many -> String
$cshow :: Many -> String
showsPrec :: Int -> Many -> ShowS
$cshowsPrec :: Int -> Many -> ShowS
Show)

instance ToCommandList Many where
  toCommandList :: Many -> [Command]
toCommandList Many
x =
    forall a. Tray a -> [Named a]
CookieTray.toList (Many -> Tray (Action Value)
tray Many
x) forall (f :: * -> *) a b. Functor f => f a -> (a -> b) -> f b
<&> \Named (Action Value)
y ->
      Command
        { name :: Name
Command.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 =
            forall a. Named a -> a
value Named (Action Value)
y 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
                }
        }