module Network.AWS.CloudFront.SignedCookies.CLI.Internal
  ( text, days
  ) where

import Network.AWS.CloudFront.SignedCookies (NominalDiffTime, Text, nominalDay)

-- base
import Data.Coerce (Coercible, coerce)
import Prelude hiding (mod)

-- optparse-applicative
import qualified Options.Applicative as Opt

-- text
import qualified Data.Text as Text

text :: Coercible Text a => String -> String -> Opt.Parser a
text :: String -> String -> Parser a
text String
long String
help = (String -> a) -> Parser String -> Parser a
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap (Text -> a
coerce (Text -> a) -> (String -> Text) -> String -> a
forall b c a. (b -> c) -> (a -> b) -> a -> c
. String -> Text
Text.pack) (Parser String -> Parser a) -> Parser String -> Parser a
forall a b. (a -> b) -> a -> b
$ Mod OptionFields String -> Parser String
forall s. IsString s => Mod OptionFields s -> Parser s
Opt.strOption (Mod OptionFields String -> Parser String)
-> Mod OptionFields String -> Parser String
forall a b. (a -> b) -> a -> b
$ String -> String -> Mod OptionFields String
forall (f :: * -> *) a. HasName f => String -> String -> Mod f a
mod String
long String
help

days :: Coercible NominalDiffTime a => String -> String -> Opt.Parser a
days :: String -> String -> Parser a
days String
long String
help = (Integer -> a) -> Parser Integer -> Parser a
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap (NominalDiffTime -> a
coerce (NominalDiffTime -> a)
-> (Integer -> NominalDiffTime) -> Integer -> a
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (NominalDiffTime -> NominalDiffTime -> NominalDiffTime
forall a. Num a => a -> a -> a
* NominalDiffTime
nominalDay) (NominalDiffTime -> NominalDiffTime)
-> (Integer -> NominalDiffTime) -> Integer -> NominalDiffTime
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Integer -> NominalDiffTime
forall a. Num a => Integer -> a
fromInteger) (Parser Integer -> Parser a) -> Parser Integer -> Parser a
forall a b. (a -> b) -> a -> b
$
  ReadM Integer -> Mod OptionFields Integer -> Parser Integer
forall a. ReadM a -> Mod OptionFields a -> Parser a
Opt.option ReadM Integer
forall a. Read a => ReadM a
Opt.auto (Mod OptionFields Integer -> Parser Integer)
-> Mod OptionFields Integer -> Parser Integer
forall a b. (a -> b) -> a -> b
$ String -> String -> Mod OptionFields Integer
forall (f :: * -> *) a. HasName f => String -> String -> Mod f a
mod String
long String
help

mod :: Opt.HasName f => String -> String -> Opt.Mod f a
mod :: String -> String -> Mod f a
mod String
long String
help = String -> Mod f a
forall (f :: * -> *) a. HasName f => String -> Mod f a
Opt.long String
long Mod f a -> Mod f a -> Mod f a
forall a. Semigroup a => a -> a -> a
<> String -> Mod f a
forall (f :: * -> *) a. String -> Mod f a
Opt.help String
help