module CookieTray.Types where

import Data.ByteString qualified as BS
import Data.ByteString.Lazy qualified as LBS
import Data.String (IsString)
import Data.Time (DiffTime, UTCTime)
import Prelude (Eq, Functor, Ord, Show)

newtype Name = Name {Name -> ByteString
nameByteString :: BS.ByteString}
  deriving newtype (Name -> Name -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: Name -> Name -> Bool
$c/= :: Name -> Name -> Bool
== :: Name -> Name -> Bool
$c== :: Name -> Name -> Bool
Eq, Eq Name
Name -> Name -> Bool
Name -> Name -> Ordering
Name -> Name -> Name
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 :: Name -> Name -> Name
$cmin :: Name -> Name -> Name
max :: Name -> Name -> Name
$cmax :: Name -> Name -> Name
>= :: Name -> Name -> Bool
$c>= :: Name -> Name -> Bool
> :: Name -> Name -> Bool
$c> :: Name -> Name -> Bool
<= :: Name -> Name -> Bool
$c<= :: Name -> Name -> Bool
< :: Name -> Name -> Bool
$c< :: Name -> Name -> Bool
compare :: Name -> Name -> Ordering
$ccompare :: Name -> Name -> Ordering
Ord, Int -> Name -> ShowS
[Name] -> ShowS
Name -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [Name] -> ShowS
$cshowList :: [Name] -> ShowS
show :: Name -> String
$cshow :: Name -> String
showsPrec :: Int -> Name -> ShowS
$cshowsPrec :: Int -> Name -> ShowS
Show, String -> Name
forall a. (String -> a) -> IsString a
fromString :: String -> Name
$cfromString :: String -> Name
IsString)

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

newtype Value = Value {Value -> ByteString
valueByteString :: BS.ByteString}
  deriving newtype (Value -> Value -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: Value -> Value -> Bool
$c/= :: Value -> Value -> Bool
== :: Value -> Value -> Bool
$c== :: Value -> Value -> Bool
Eq, Eq Value
Value -> Value -> Bool
Value -> Value -> Ordering
Value -> Value -> Value
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 :: Value -> Value -> Value
$cmin :: Value -> Value -> Value
max :: Value -> Value -> Value
$cmax :: Value -> Value -> Value
>= :: Value -> Value -> Bool
$c>= :: Value -> Value -> Bool
> :: Value -> Value -> Bool
$c> :: Value -> Value -> Bool
<= :: Value -> Value -> Bool
$c<= :: Value -> Value -> Bool
< :: Value -> Value -> Bool
$c< :: Value -> Value -> Bool
compare :: Value -> Value -> Ordering
$ccompare :: Value -> Value -> Ordering
Ord, Int -> Value -> ShowS
[Value] -> ShowS
Value -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [Value] -> ShowS
$cshowList :: [Value] -> ShowS
show :: Value -> String
$cshow :: Value -> String
showsPrec :: Int -> Value -> ShowS
$cshowsPrec :: Int -> Value -> ShowS
Show, String -> Value
forall a. (String -> a) -> IsString a
fromString :: String -> Value
$cfromString :: String -> Value
IsString)

-- | The raw content of a set-cookie header
newtype BinaryCommand = BinaryCommand {BinaryCommand -> ByteString
binaryCommandByteStringLazy :: LBS.ByteString}
  deriving newtype (BinaryCommand -> BinaryCommand -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: BinaryCommand -> BinaryCommand -> Bool
$c/= :: BinaryCommand -> BinaryCommand -> Bool
== :: BinaryCommand -> BinaryCommand -> Bool
$c== :: BinaryCommand -> BinaryCommand -> Bool
Eq, Eq BinaryCommand
BinaryCommand -> BinaryCommand -> Bool
BinaryCommand -> BinaryCommand -> Ordering
BinaryCommand -> BinaryCommand -> BinaryCommand
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 :: BinaryCommand -> BinaryCommand -> BinaryCommand
$cmin :: BinaryCommand -> BinaryCommand -> BinaryCommand
max :: BinaryCommand -> BinaryCommand -> BinaryCommand
$cmax :: BinaryCommand -> BinaryCommand -> BinaryCommand
>= :: BinaryCommand -> BinaryCommand -> Bool
$c>= :: BinaryCommand -> BinaryCommand -> Bool
> :: BinaryCommand -> BinaryCommand -> Bool
$c> :: BinaryCommand -> BinaryCommand -> Bool
<= :: BinaryCommand -> BinaryCommand -> Bool
$c<= :: BinaryCommand -> BinaryCommand -> Bool
< :: BinaryCommand -> BinaryCommand -> Bool
$c< :: BinaryCommand -> BinaryCommand -> Bool
compare :: BinaryCommand -> BinaryCommand -> Ordering
$ccompare :: BinaryCommand -> BinaryCommand -> Ordering
Ord, Int -> BinaryCommand -> ShowS
[BinaryCommand] -> ShowS
BinaryCommand -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [BinaryCommand] -> ShowS
$cshowList :: [BinaryCommand] -> ShowS
show :: BinaryCommand -> String
$cshow :: BinaryCommand -> String
showsPrec :: Int -> BinaryCommand -> ShowS
$cshowsPrec :: Int -> BinaryCommand -> ShowS
Show, String -> BinaryCommand
forall a. (String -> a) -> IsString a
fromString :: String -> BinaryCommand
$cfromString :: String -> BinaryCommand
IsString)

data JavascriptAccess
  = -- | HttpOnly; javascript cannot access the cookie
    HiddenFromJavascript
  | -- | Cookie will be accessible from javascript,
    -- see https://developer.mozilla.org/en-US/docs/web/api/document/cookie
    AccessibleFromJavascript
  deriving (JavascriptAccess -> JavascriptAccess -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: JavascriptAccess -> JavascriptAccess -> Bool
$c/= :: JavascriptAccess -> JavascriptAccess -> Bool
== :: JavascriptAccess -> JavascriptAccess -> Bool
$c== :: JavascriptAccess -> JavascriptAccess -> Bool
Eq, Eq JavascriptAccess
JavascriptAccess -> JavascriptAccess -> Bool
JavascriptAccess -> JavascriptAccess -> Ordering
JavascriptAccess -> JavascriptAccess -> JavascriptAccess
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 :: JavascriptAccess -> JavascriptAccess -> JavascriptAccess
$cmin :: JavascriptAccess -> JavascriptAccess -> JavascriptAccess
max :: JavascriptAccess -> JavascriptAccess -> JavascriptAccess
$cmax :: JavascriptAccess -> JavascriptAccess -> JavascriptAccess
>= :: JavascriptAccess -> JavascriptAccess -> Bool
$c>= :: JavascriptAccess -> JavascriptAccess -> Bool
> :: JavascriptAccess -> JavascriptAccess -> Bool
$c> :: JavascriptAccess -> JavascriptAccess -> Bool
<= :: JavascriptAccess -> JavascriptAccess -> Bool
$c<= :: JavascriptAccess -> JavascriptAccess -> Bool
< :: JavascriptAccess -> JavascriptAccess -> Bool
$c< :: JavascriptAccess -> JavascriptAccess -> Bool
compare :: JavascriptAccess -> JavascriptAccess -> Ordering
$ccompare :: JavascriptAccess -> JavascriptAccess -> Ordering
Ord, Int -> JavascriptAccess -> ShowS
[JavascriptAccess] -> ShowS
JavascriptAccess -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [JavascriptAccess] -> ShowS
$cshowList :: [JavascriptAccess] -> ShowS
show :: JavascriptAccess -> String
$cshow :: JavascriptAccess -> String
showsPrec :: Int -> JavascriptAccess -> ShowS
$cshowsPrec :: Int -> JavascriptAccess -> ShowS
Show)

data TransportEncryption
  = -- | The browser only sends cookies over HTTP, not HTTP
    RequireEncryptedTransport
  | -- | The browser sends cookies regardless of transport encryption
    AllowUnencryptedTransport
  deriving (TransportEncryption -> TransportEncryption -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: TransportEncryption -> TransportEncryption -> Bool
$c/= :: TransportEncryption -> TransportEncryption -> Bool
== :: TransportEncryption -> TransportEncryption -> Bool
$c== :: TransportEncryption -> TransportEncryption -> Bool
Eq, Eq TransportEncryption
TransportEncryption -> TransportEncryption -> Bool
TransportEncryption -> TransportEncryption -> Ordering
TransportEncryption -> TransportEncryption -> TransportEncryption
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 :: TransportEncryption -> TransportEncryption -> TransportEncryption
$cmin :: TransportEncryption -> TransportEncryption -> TransportEncryption
max :: TransportEncryption -> TransportEncryption -> TransportEncryption
$cmax :: TransportEncryption -> TransportEncryption -> TransportEncryption
>= :: TransportEncryption -> TransportEncryption -> Bool
$c>= :: TransportEncryption -> TransportEncryption -> Bool
> :: TransportEncryption -> TransportEncryption -> Bool
$c> :: TransportEncryption -> TransportEncryption -> Bool
<= :: TransportEncryption -> TransportEncryption -> Bool
$c<= :: TransportEncryption -> TransportEncryption -> Bool
< :: TransportEncryption -> TransportEncryption -> Bool
$c< :: TransportEncryption -> TransportEncryption -> Bool
compare :: TransportEncryption -> TransportEncryption -> Ordering
$ccompare :: TransportEncryption -> TransportEncryption -> Ordering
Ord, Int -> TransportEncryption -> ShowS
[TransportEncryption] -> ShowS
TransportEncryption -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [TransportEncryption] -> ShowS
$cshowList :: [TransportEncryption] -> ShowS
show :: TransportEncryption -> String
$cshow :: TransportEncryption -> String
showsPrec :: Int -> TransportEncryption -> ShowS
$cshowsPrec :: Int -> TransportEncryption -> ShowS
Show)

data Origin
  = SameSite SameSiteOptions
  | -- | Instruct the client to send the cookie for all requests,
    -- even those originating from a third party.
    -- This option implies 'RequireEncryptedTransport'.
    CrossSite
  deriving (Origin -> Origin -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: Origin -> Origin -> Bool
$c/= :: Origin -> Origin -> Bool
== :: Origin -> Origin -> Bool
$c== :: Origin -> Origin -> Bool
Eq, Eq Origin
Origin -> Origin -> Bool
Origin -> Origin -> Ordering
Origin -> Origin -> Origin
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 :: Origin -> Origin -> Origin
$cmin :: Origin -> Origin -> Origin
max :: Origin -> Origin -> Origin
$cmax :: Origin -> Origin -> Origin
>= :: Origin -> Origin -> Bool
$c>= :: Origin -> Origin -> Bool
> :: Origin -> Origin -> Bool
$c> :: Origin -> Origin -> Bool
<= :: Origin -> Origin -> Bool
$c<= :: Origin -> Origin -> Bool
< :: Origin -> Origin -> Bool
$c< :: Origin -> Origin -> Bool
compare :: Origin -> Origin -> Ordering
$ccompare :: Origin -> Origin -> Ordering
Ord, Int -> Origin -> ShowS
[Origin] -> ShowS
Origin -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [Origin] -> ShowS
$cshowList :: [Origin] -> ShowS
show :: Origin -> String
$cshow :: Origin -> String
showsPrec :: Int -> Origin -> ShowS
$cshowsPrec :: Int -> Origin -> ShowS
Show)

data SameSiteOptions = SameSiteOptions
  { SameSiteOptions -> SameSiteStrictness
sameSiteStrictness :: SameSiteStrictness,
    SameSiteOptions -> TransportEncryption
transportEncryption :: TransportEncryption
  }
  deriving (SameSiteOptions -> SameSiteOptions -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: SameSiteOptions -> SameSiteOptions -> Bool
$c/= :: SameSiteOptions -> SameSiteOptions -> Bool
== :: SameSiteOptions -> SameSiteOptions -> Bool
$c== :: SameSiteOptions -> SameSiteOptions -> Bool
Eq, Eq SameSiteOptions
SameSiteOptions -> SameSiteOptions -> Bool
SameSiteOptions -> SameSiteOptions -> Ordering
SameSiteOptions -> SameSiteOptions -> SameSiteOptions
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 :: SameSiteOptions -> SameSiteOptions -> SameSiteOptions
$cmin :: SameSiteOptions -> SameSiteOptions -> SameSiteOptions
max :: SameSiteOptions -> SameSiteOptions -> SameSiteOptions
$cmax :: SameSiteOptions -> SameSiteOptions -> SameSiteOptions
>= :: SameSiteOptions -> SameSiteOptions -> Bool
$c>= :: SameSiteOptions -> SameSiteOptions -> Bool
> :: SameSiteOptions -> SameSiteOptions -> Bool
$c> :: SameSiteOptions -> SameSiteOptions -> Bool
<= :: SameSiteOptions -> SameSiteOptions -> Bool
$c<= :: SameSiteOptions -> SameSiteOptions -> Bool
< :: SameSiteOptions -> SameSiteOptions -> Bool
$c< :: SameSiteOptions -> SameSiteOptions -> Bool
compare :: SameSiteOptions -> SameSiteOptions -> Ordering
$ccompare :: SameSiteOptions -> SameSiteOptions -> Ordering
Ord, Int -> SameSiteOptions -> ShowS
[SameSiteOptions] -> ShowS
SameSiteOptions -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [SameSiteOptions] -> ShowS
$cshowList :: [SameSiteOptions] -> ShowS
show :: SameSiteOptions -> String
$cshow :: SameSiteOptions -> String
showsPrec :: Int -> SameSiteOptions -> ShowS
$cshowsPrec :: Int -> SameSiteOptions -> ShowS
Show)

data SameSiteStrictness
  = -- | Instruct the client not to send the cookie for requests originating
    -- from another site, e.g. if a user clicked a link from another site to
    -- yours. This setting offers the strongest protection against cross-site
    -- request forgery, but does not make sense in a lot of cases. (If somebody
    -- follows a link to your site, should they appear to be logged out?)
    SameSiteStrict
  | -- | The client will send the cookie whenever your domain is what appears
    -- in the navigation bar
    SameSiteLax
  deriving (SameSiteStrictness -> SameSiteStrictness -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: SameSiteStrictness -> SameSiteStrictness -> Bool
$c/= :: SameSiteStrictness -> SameSiteStrictness -> Bool
== :: SameSiteStrictness -> SameSiteStrictness -> Bool
$c== :: SameSiteStrictness -> SameSiteStrictness -> Bool
Eq, Eq SameSiteStrictness
SameSiteStrictness -> SameSiteStrictness -> Bool
SameSiteStrictness -> SameSiteStrictness -> Ordering
SameSiteStrictness -> SameSiteStrictness -> SameSiteStrictness
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 :: SameSiteStrictness -> SameSiteStrictness -> SameSiteStrictness
$cmin :: SameSiteStrictness -> SameSiteStrictness -> SameSiteStrictness
max :: SameSiteStrictness -> SameSiteStrictness -> SameSiteStrictness
$cmax :: SameSiteStrictness -> SameSiteStrictness -> SameSiteStrictness
>= :: SameSiteStrictness -> SameSiteStrictness -> Bool
$c>= :: SameSiteStrictness -> SameSiteStrictness -> Bool
> :: SameSiteStrictness -> SameSiteStrictness -> Bool
$c> :: SameSiteStrictness -> SameSiteStrictness -> Bool
<= :: SameSiteStrictness -> SameSiteStrictness -> Bool
$c<= :: SameSiteStrictness -> SameSiteStrictness -> Bool
< :: SameSiteStrictness -> SameSiteStrictness -> Bool
$c< :: SameSiteStrictness -> SameSiteStrictness -> Bool
compare :: SameSiteStrictness -> SameSiteStrictness -> Ordering
$ccompare :: SameSiteStrictness -> SameSiteStrictness -> Ordering
Ord, Int -> SameSiteStrictness -> ShowS
[SameSiteStrictness] -> ShowS
SameSiteStrictness -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [SameSiteStrictness] -> ShowS
$cshowList :: [SameSiteStrictness] -> ShowS
show :: SameSiteStrictness -> String
$cshow :: SameSiteStrictness -> String
showsPrec :: Int -> SameSiteStrictness -> ShowS
$cshowsPrec :: Int -> SameSiteStrictness -> ShowS
Show)

data Security = Security
  { Security -> JavascriptAccess
jsAccess :: JavascriptAccess,
    Security -> Origin
origin :: Origin
  }
  deriving (Security -> Security -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: Security -> Security -> Bool
$c/= :: Security -> Security -> Bool
== :: Security -> Security -> Bool
$c== :: Security -> Security -> Bool
Eq, Eq Security
Security -> Security -> Bool
Security -> Security -> Ordering
Security -> Security -> Security
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 :: Security -> Security -> Security
$cmin :: Security -> Security -> Security
max :: Security -> Security -> Security
$cmax :: Security -> Security -> Security
>= :: Security -> Security -> Bool
$c>= :: Security -> Security -> Bool
> :: Security -> Security -> Bool
$c> :: Security -> Security -> Bool
<= :: Security -> Security -> Bool
$c<= :: Security -> Security -> Bool
< :: Security -> Security -> Bool
$c< :: Security -> Security -> Bool
compare :: Security -> Security -> Ordering
$ccompare :: Security -> Security -> Ordering
Ord, Int -> Security -> ShowS
[Security] -> ShowS
Security -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [Security] -> ShowS
$cshowList :: [Security] -> ShowS
show :: Security -> String
$cshow :: Security -> String
showsPrec :: Int -> Security -> ShowS
$cshowsPrec :: Int -> Security -> ShowS
Show)

data Secured a = Secured
  { forall a. Secured a -> Security
security :: Security,
    forall a. Secured a -> a
secured :: a
  }
  deriving (Secured a -> Secured a -> Bool
forall a. Eq a => Secured a -> Secured a -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: Secured a -> Secured a -> Bool
$c/= :: forall a. Eq a => Secured a -> Secured a -> Bool
== :: Secured a -> Secured a -> Bool
$c== :: forall a. Eq a => Secured a -> Secured a -> Bool
Eq, Secured a -> Secured a -> Bool
Secured a -> Secured a -> Ordering
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 (Secured a)
forall a. Ord a => Secured a -> Secured a -> Bool
forall a. Ord a => Secured a -> Secured a -> Ordering
forall a. Ord a => Secured a -> Secured a -> Secured a
min :: Secured a -> Secured a -> Secured a
$cmin :: forall a. Ord a => Secured a -> Secured a -> Secured a
max :: Secured a -> Secured a -> Secured a
$cmax :: forall a. Ord a => Secured a -> Secured a -> Secured a
>= :: Secured a -> Secured a -> Bool
$c>= :: forall a. Ord a => Secured a -> Secured a -> Bool
> :: Secured a -> Secured a -> Bool
$c> :: forall a. Ord a => Secured a -> Secured a -> Bool
<= :: Secured a -> Secured a -> Bool
$c<= :: forall a. Ord a => Secured a -> Secured a -> Bool
< :: Secured a -> Secured a -> Bool
$c< :: forall a. Ord a => Secured a -> Secured a -> Bool
compare :: Secured a -> Secured a -> Ordering
$ccompare :: forall a. Ord a => Secured a -> Secured a -> Ordering
Ord, Int -> Secured a -> ShowS
forall a. Show a => Int -> Secured a -> ShowS
forall a. Show a => [Secured a] -> ShowS
forall a. Show a => Secured a -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [Secured a] -> ShowS
$cshowList :: forall a. Show a => [Secured a] -> ShowS
show :: Secured a -> String
$cshow :: forall a. Show a => Secured a -> String
showsPrec :: Int -> Secured a -> ShowS
$cshowsPrec :: forall a. Show a => Int -> Secured a -> ShowS
Show, forall a b. a -> Secured b -> Secured a
forall a b. (a -> b) -> Secured a -> Secured b
forall (f :: * -> *).
(forall a b. (a -> b) -> f a -> f b)
-> (forall a b. a -> f b -> f a) -> Functor f
<$ :: forall a b. a -> Secured b -> Secured a
$c<$ :: forall a b. a -> Secured b -> Secured a
fmap :: forall a b. (a -> b) -> Secured a -> Secured b
$cfmap :: forall a b. (a -> b) -> Secured a -> Secured b
Functor)

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

data Expiring a = Expiring {forall a. Expiring a -> Expiry
expiry :: Expiry, forall a. Expiring a -> a
expiring :: a}
  deriving (Expiring a -> Expiring a -> Bool
forall a. Eq a => Expiring a -> Expiring a -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: Expiring a -> Expiring a -> Bool
$c/= :: forall a. Eq a => Expiring a -> Expiring a -> Bool
== :: Expiring a -> Expiring a -> Bool
$c== :: forall a. Eq a => Expiring a -> Expiring a -> Bool
Eq, Expiring a -> Expiring a -> Bool
Expiring a -> Expiring a -> Ordering
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 (Expiring a)
forall a. Ord a => Expiring a -> Expiring a -> Bool
forall a. Ord a => Expiring a -> Expiring a -> Ordering
forall a. Ord a => Expiring a -> Expiring a -> Expiring a
min :: Expiring a -> Expiring a -> Expiring a
$cmin :: forall a. Ord a => Expiring a -> Expiring a -> Expiring a
max :: Expiring a -> Expiring a -> Expiring a
$cmax :: forall a. Ord a => Expiring a -> Expiring a -> Expiring a
>= :: Expiring a -> Expiring a -> Bool
$c>= :: forall a. Ord a => Expiring a -> Expiring a -> Bool
> :: Expiring a -> Expiring a -> Bool
$c> :: forall a. Ord a => Expiring a -> Expiring a -> Bool
<= :: Expiring a -> Expiring a -> Bool
$c<= :: forall a. Ord a => Expiring a -> Expiring a -> Bool
< :: Expiring a -> Expiring a -> Bool
$c< :: forall a. Ord a => Expiring a -> Expiring a -> Bool
compare :: Expiring a -> Expiring a -> Ordering
$ccompare :: forall a. Ord a => Expiring a -> Expiring a -> Ordering
Ord, Int -> Expiring a -> ShowS
forall a. Show a => Int -> Expiring a -> ShowS
forall a. Show a => [Expiring a] -> ShowS
forall a. Show a => Expiring a -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [Expiring a] -> ShowS
$cshowList :: forall a. Show a => [Expiring a] -> ShowS
show :: Expiring a -> String
$cshow :: forall a. Show a => Expiring a -> String
showsPrec :: Int -> Expiring a -> ShowS
$cshowsPrec :: forall a. Show a => Int -> Expiring a -> ShowS
Show, forall a b. a -> Expiring b -> Expiring a
forall a b. (a -> b) -> Expiring a -> Expiring b
forall (f :: * -> *).
(forall a b. (a -> b) -> f a -> f b)
-> (forall a b. a -> f b -> f a) -> Functor f
<$ :: forall a b. a -> Expiring b -> Expiring a
$c<$ :: forall a b. a -> Expiring b -> Expiring a
fmap :: forall a b. (a -> b) -> Expiring a -> Expiring b
$cfmap :: forall a b. (a -> b) -> Expiring a -> Expiring b
Functor)

-- | The host to which the cookie will be sent
data Domain = Domain BS.ByteString | CurrentHostExcludingSubdomains
  deriving (Domain -> Domain -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: Domain -> Domain -> Bool
$c/= :: Domain -> Domain -> Bool
== :: Domain -> Domain -> Bool
$c== :: Domain -> Domain -> Bool
Eq, Eq Domain
Domain -> Domain -> Bool
Domain -> Domain -> Ordering
Domain -> Domain -> Domain
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 :: Domain -> Domain -> Domain
$cmin :: Domain -> Domain -> Domain
max :: Domain -> Domain -> Domain
$cmax :: Domain -> Domain -> Domain
>= :: Domain -> Domain -> Bool
$c>= :: Domain -> Domain -> Bool
> :: Domain -> Domain -> Bool
$c> :: Domain -> Domain -> Bool
<= :: Domain -> Domain -> Bool
$c<= :: Domain -> Domain -> Bool
< :: Domain -> Domain -> Bool
$c< :: Domain -> Domain -> Bool
compare :: Domain -> Domain -> Ordering
$ccompare :: Domain -> Domain -> Ordering
Ord, Int -> Domain -> ShowS
[Domain] -> ShowS
Domain -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [Domain] -> ShowS
$cshowList :: [Domain] -> ShowS
show :: Domain -> String
$cshow :: Domain -> String
showsPrec :: Int -> Domain -> ShowS
$cshowsPrec :: Int -> Domain -> ShowS
Show)

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

data Scope = Scope {Scope -> Domain
domain :: Domain, Scope -> Path
path :: Path}
  deriving (Scope -> Scope -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: Scope -> Scope -> Bool
$c/= :: Scope -> Scope -> Bool
== :: Scope -> Scope -> Bool
$c== :: Scope -> Scope -> Bool
Eq, Eq Scope
Scope -> Scope -> Bool
Scope -> Scope -> Ordering
Scope -> Scope -> Scope
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 :: Scope -> Scope -> Scope
$cmin :: Scope -> Scope -> Scope
max :: Scope -> Scope -> Scope
$cmax :: Scope -> Scope -> Scope
>= :: Scope -> Scope -> Bool
$c>= :: Scope -> Scope -> Bool
> :: Scope -> Scope -> Bool
$c> :: Scope -> Scope -> Bool
<= :: Scope -> Scope -> Bool
$c<= :: Scope -> Scope -> Bool
< :: Scope -> Scope -> Bool
$c< :: Scope -> Scope -> Bool
compare :: Scope -> Scope -> Ordering
$ccompare :: Scope -> Scope -> Ordering
Ord, Int -> Scope -> ShowS
[Scope] -> ShowS
Scope -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [Scope] -> ShowS
$cshowList :: [Scope] -> ShowS
show :: Scope -> String
$cshow :: Scope -> String
showsPrec :: Int -> Scope -> ShowS
$cshowsPrec :: Int -> Scope -> ShowS
Show)

data Meta = Meta {Meta -> Scope
metaScope :: Scope, Meta -> Security
metaSecurity :: Security}
  deriving (Meta -> Meta -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: Meta -> Meta -> Bool
$c/= :: Meta -> Meta -> Bool
== :: Meta -> Meta -> Bool
$c== :: Meta -> Meta -> Bool
Eq, Eq Meta
Meta -> Meta -> Bool
Meta -> Meta -> Ordering
Meta -> Meta -> Meta
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 :: Meta -> Meta -> Meta
$cmin :: Meta -> Meta -> Meta
max :: Meta -> Meta -> Meta
$cmax :: Meta -> Meta -> Meta
>= :: Meta -> Meta -> Bool
$c>= :: Meta -> Meta -> Bool
> :: Meta -> Meta -> Bool
$c> :: Meta -> Meta -> Bool
<= :: Meta -> Meta -> Bool
$c<= :: Meta -> Meta -> Bool
< :: Meta -> Meta -> Bool
$c< :: Meta -> Meta -> Bool
compare :: Meta -> Meta -> Ordering
$ccompare :: Meta -> Meta -> Ordering
Ord, Int -> Meta -> ShowS
[Meta] -> ShowS
Meta -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [Meta] -> ShowS
$cshowList :: [Meta] -> ShowS
show :: Meta -> String
$cshow :: Meta -> String
showsPrec :: Int -> Meta -> ShowS
$cshowsPrec :: Int -> Meta -> ShowS
Show)

data Action a = Delete | Put a
  deriving (Action a -> Action a -> Bool
forall a. Eq a => Action a -> Action a -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: Action a -> Action a -> Bool
$c/= :: forall a. Eq a => Action a -> Action a -> Bool
== :: Action a -> Action a -> Bool
$c== :: forall a. Eq a => Action a -> Action a -> Bool
Eq, Action a -> Action a -> Bool
Action a -> Action a -> Ordering
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 (Action a)
forall a. Ord a => Action a -> Action a -> Bool
forall a. Ord a => Action a -> Action a -> Ordering
forall a. Ord a => Action a -> Action a -> Action a
min :: Action a -> Action a -> Action a
$cmin :: forall a. Ord a => Action a -> Action a -> Action a
max :: Action a -> Action a -> Action a
$cmax :: forall a. Ord a => Action a -> Action a -> Action a
>= :: Action a -> Action a -> Bool
$c>= :: forall a. Ord a => Action a -> Action a -> Bool
> :: Action a -> Action a -> Bool
$c> :: forall a. Ord a => Action a -> Action a -> Bool
<= :: Action a -> Action a -> Bool
$c<= :: forall a. Ord a => Action a -> Action a -> Bool
< :: Action a -> Action a -> Bool
$c< :: forall a. Ord a => Action a -> Action a -> Bool
compare :: Action a -> Action a -> Ordering
$ccompare :: forall a. Ord a => Action a -> Action a -> Ordering
Ord, Int -> Action a -> ShowS
forall a. Show a => Int -> Action a -> ShowS
forall a. Show a => [Action a] -> ShowS
forall a. Show a => Action a -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [Action a] -> ShowS
$cshowList :: forall a. Show a => [Action a] -> ShowS
show :: Action a -> String
$cshow :: forall a. Show a => Action a -> String
showsPrec :: Int -> Action a -> ShowS
$cshowsPrec :: forall a. Show a => Int -> Action a -> ShowS
Show, forall a b. a -> Action b -> Action a
forall a b. (a -> b) -> Action a -> Action b
forall (f :: * -> *).
(forall a b. (a -> b) -> f a -> f b)
-> (forall a b. a -> f b -> f a) -> Functor f
<$ :: forall a b. a -> Action b -> Action a
$c<$ :: forall a b. a -> Action b -> Action a
fmap :: forall a b. (a -> b) -> Action a -> Action b
$cfmap :: forall a b. (a -> b) -> Action a -> Action b
Functor)