module CookieTray.Command.PutMany where

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

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