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

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