module Hypermedia.Datastar.PatchSignals where
import Data.Text (Text)
import Data.Text qualified as T
import Hypermedia.Datastar.Types
data PatchSignals = PatchSignals
{ PatchSignals -> Text
psSignals :: Text
, PatchSignals -> Bool
psOnlyIfMissing :: Bool
, PatchSignals -> Maybe Text
psEventId :: Maybe Text
, PatchSignals -> Int
psRetryDuration :: Int
}
deriving (PatchSignals -> PatchSignals -> Bool
(PatchSignals -> PatchSignals -> Bool)
-> (PatchSignals -> PatchSignals -> Bool) -> Eq PatchSignals
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
$c== :: PatchSignals -> PatchSignals -> Bool
== :: PatchSignals -> PatchSignals -> Bool
$c/= :: PatchSignals -> PatchSignals -> Bool
/= :: PatchSignals -> PatchSignals -> Bool
Eq, Int -> PatchSignals -> ShowS
[PatchSignals] -> ShowS
PatchSignals -> String
(Int -> PatchSignals -> ShowS)
-> (PatchSignals -> String)
-> ([PatchSignals] -> ShowS)
-> Show PatchSignals
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
$cshowsPrec :: Int -> PatchSignals -> ShowS
showsPrec :: Int -> PatchSignals -> ShowS
$cshow :: PatchSignals -> String
show :: PatchSignals -> String
$cshowList :: [PatchSignals] -> ShowS
showList :: [PatchSignals] -> ShowS
Show)
patchSignals :: Text -> PatchSignals
patchSignals :: Text -> PatchSignals
patchSignals Text
sigs =
PatchSignals
{ psSignals :: Text
psSignals = Text
sigs
, psOnlyIfMissing :: Bool
psOnlyIfMissing = Bool
defaultOnlyIfMissing
, psEventId :: Maybe Text
psEventId = Maybe Text
forall a. Maybe a
Nothing
, psRetryDuration :: Int
psRetryDuration = Int
defaultRetryDuration
}
toDatastarEvent :: PatchSignals -> DatastarEvent
toDatastarEvent :: PatchSignals -> DatastarEvent
toDatastarEvent PatchSignals
ps =
DatastarEvent
{ eventType :: EventType
eventType = EventType
EventPatchSignals
, eventId :: Maybe Text
eventId = PatchSignals -> Maybe Text
psEventId PatchSignals
ps
, retry :: Int
retry = PatchSignals -> Int
psRetryDuration PatchSignals
ps
, dataLines :: [Text]
dataLines = [Text]
ifMissingLine [Text] -> [Text] -> [Text]
forall a. [a] -> [a] -> [a]
++ [Text]
signalLines
}
where
ifMissingLine :: [Text]
ifMissingLine = [Text
"onlyIfMissing true" | PatchSignals -> Bool
psOnlyIfMissing PatchSignals
ps]
signalLines :: [Text]
signalLines = (Text -> Text) -> [Text] -> [Text]
forall a b. (a -> b) -> [a] -> [b]
map (Text
"signals " Text -> Text -> Text
forall a. Semigroup a => a -> a -> a
<>) ([Text] -> [Text]) -> [Text] -> [Text]
forall a b. (a -> b) -> a -> b
$ Text -> [Text]
T.lines (Text -> [Text]) -> Text -> [Text]
forall a b. (a -> b) -> a -> b
$ PatchSignals -> Text
psSignals PatchSignals
ps