module Effectful.Notify.Internal.Data.NotifyTimeout
( NotifyTimeout (..),
_NotifyTimeoutMillis,
_NotifyTimeoutNever,
)
where
import Control.DeepSeq (NFData)
import Data.Text.Display (Display (displayBuilder))
import GHC.Generics (Generic)
import Optics.Core (Prism', prism)
data NotifyTimeout
= NotifyTimeoutNever
| NotifyTimeoutMillis Int
deriving stock (NotifyTimeout -> NotifyTimeout -> Bool
(NotifyTimeout -> NotifyTimeout -> Bool)
-> (NotifyTimeout -> NotifyTimeout -> Bool) -> Eq NotifyTimeout
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
$c== :: NotifyTimeout -> NotifyTimeout -> Bool
== :: NotifyTimeout -> NotifyTimeout -> Bool
$c/= :: NotifyTimeout -> NotifyTimeout -> Bool
/= :: NotifyTimeout -> NotifyTimeout -> Bool
Eq, (forall x. NotifyTimeout -> Rep NotifyTimeout x)
-> (forall x. Rep NotifyTimeout x -> NotifyTimeout)
-> Generic NotifyTimeout
forall x. Rep NotifyTimeout x -> NotifyTimeout
forall x. NotifyTimeout -> Rep NotifyTimeout x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cfrom :: forall x. NotifyTimeout -> Rep NotifyTimeout x
from :: forall x. NotifyTimeout -> Rep NotifyTimeout x
$cto :: forall x. Rep NotifyTimeout x -> NotifyTimeout
to :: forall x. Rep NotifyTimeout x -> NotifyTimeout
Generic, Eq NotifyTimeout
Eq NotifyTimeout =>
(NotifyTimeout -> NotifyTimeout -> Ordering)
-> (NotifyTimeout -> NotifyTimeout -> Bool)
-> (NotifyTimeout -> NotifyTimeout -> Bool)
-> (NotifyTimeout -> NotifyTimeout -> Bool)
-> (NotifyTimeout -> NotifyTimeout -> Bool)
-> (NotifyTimeout -> NotifyTimeout -> NotifyTimeout)
-> (NotifyTimeout -> NotifyTimeout -> NotifyTimeout)
-> Ord NotifyTimeout
NotifyTimeout -> NotifyTimeout -> Bool
NotifyTimeout -> NotifyTimeout -> Ordering
NotifyTimeout -> NotifyTimeout -> NotifyTimeout
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 :: NotifyTimeout -> NotifyTimeout -> Ordering
compare :: NotifyTimeout -> NotifyTimeout -> Ordering
$c< :: NotifyTimeout -> NotifyTimeout -> Bool
< :: NotifyTimeout -> NotifyTimeout -> Bool
$c<= :: NotifyTimeout -> NotifyTimeout -> Bool
<= :: NotifyTimeout -> NotifyTimeout -> Bool
$c> :: NotifyTimeout -> NotifyTimeout -> Bool
> :: NotifyTimeout -> NotifyTimeout -> Bool
$c>= :: NotifyTimeout -> NotifyTimeout -> Bool
>= :: NotifyTimeout -> NotifyTimeout -> Bool
$cmax :: NotifyTimeout -> NotifyTimeout -> NotifyTimeout
max :: NotifyTimeout -> NotifyTimeout -> NotifyTimeout
$cmin :: NotifyTimeout -> NotifyTimeout -> NotifyTimeout
min :: NotifyTimeout -> NotifyTimeout -> NotifyTimeout
Ord, Int -> NotifyTimeout -> ShowS
[NotifyTimeout] -> ShowS
NotifyTimeout -> String
(Int -> NotifyTimeout -> ShowS)
-> (NotifyTimeout -> String)
-> ([NotifyTimeout] -> ShowS)
-> Show NotifyTimeout
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
$cshowsPrec :: Int -> NotifyTimeout -> ShowS
showsPrec :: Int -> NotifyTimeout -> ShowS
$cshow :: NotifyTimeout -> String
show :: NotifyTimeout -> String
$cshowList :: [NotifyTimeout] -> ShowS
showList :: [NotifyTimeout] -> ShowS
Show)
deriving anyclass (NotifyTimeout -> ()
(NotifyTimeout -> ()) -> NFData NotifyTimeout
forall a. (a -> ()) -> NFData a
$crnf :: NotifyTimeout -> ()
rnf :: NotifyTimeout -> ()
NFData)
instance Display NotifyTimeout where
displayBuilder :: NotifyTimeout -> Builder
displayBuilder = \case
NotifyTimeout
NotifyTimeoutNever -> Builder
"never"
NotifyTimeoutMillis Int
i -> Int -> Builder
forall a. Display a => a -> Builder
displayBuilder Int
i Builder -> Builder -> Builder
forall a. Semigroup a => a -> a -> a
<> Builder
" ms"
_NotifyTimeoutMillis :: Prism' NotifyTimeout Int
_NotifyTimeoutMillis :: Prism' NotifyTimeout Int
_NotifyTimeoutMillis =
(Int -> NotifyTimeout)
-> (NotifyTimeout -> Either NotifyTimeout Int)
-> Prism' NotifyTimeout Int
forall b t s a. (b -> t) -> (s -> Either t a) -> Prism s t a b
prism
Int -> NotifyTimeout
NotifyTimeoutMillis
( \case
NotifyTimeoutMillis Int
x -> Int -> Either NotifyTimeout Int
forall a b. b -> Either a b
Right Int
x
NotifyTimeout
x -> NotifyTimeout -> Either NotifyTimeout Int
forall a b. a -> Either a b
Left NotifyTimeout
x
)
{-# INLINE _NotifyTimeoutMillis #-}
_NotifyTimeoutNever :: Prism' NotifyTimeout ()
_NotifyTimeoutNever :: Prism' NotifyTimeout ()
_NotifyTimeoutNever =
(() -> NotifyTimeout)
-> (NotifyTimeout -> Either NotifyTimeout ())
-> Prism' NotifyTimeout ()
forall b t s a. (b -> t) -> (s -> Either t a) -> Prism s t a b
prism
(NotifyTimeout -> () -> NotifyTimeout
forall a b. a -> b -> a
const NotifyTimeout
NotifyTimeoutNever)
( \case
NotifyTimeout
NotifyTimeoutNever -> () -> Either NotifyTimeout ()
forall a b. b -> Either a b
Right ()
NotifyTimeout
x -> NotifyTimeout -> Either NotifyTimeout ()
forall a b. a -> Either a b
Left NotifyTimeout
x
)
{-# INLINE _NotifyTimeoutNever #-}