| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647 |
- module LinkedIn.UI.Strings.Parser where
- import Prelude
- import Control.Alt ((<|>))
- import Data.Either (hush)
- import Data.Traversable (traverse)
- import LinkedIn.UI.Basic.Parser (durationP, jobFlexP, medianDotSeparated, timeSpanP)
- import LinkedIn.UI.Strings.Types (UIString(..))
- import Parsing (Parser, liftMaybe, runParser)
- import Parsing.Combinators (try)
- import Parsing.String (rest)
- uiStringP :: Parser String UIString
- uiStringP = (try uiStringdotSeparatedP) <|> uiStringSingleP
- uiStringWithoutMedianDotP ∷ Parser String UIString
- uiStringWithoutMedianDotP = do
- s <- rest
- liftMaybe (\_ -> "nope") $ hush $ runParser s uiStringSingleP
- uiStringdotSeparatedP ∷ Parser String UIString
- uiStringdotSeparatedP = do
- stringsNel <- medianDotSeparated
- let
- intoUiElement :: String -> Parser String UIString
- intoUiElement s = liftMaybe (\_ -> "could not convert to ui element") $ hush $ runParser s uiStringSingleP
- stringsNel' <- traverse intoUiElement stringsNel
- pure $ UIStringDotSeparated stringsNel'
- uiStringSingleP ∷ Parser String UIString
- uiStringSingleP = (try uiStringDurationP) <|> (try uiStringTimeSpanP) <|> (try uiStringJobFlexP) <|> uiStringPlainP
- uiStringDurationP ∷ Parser String UIString
- uiStringDurationP = UIStringDuration <$> durationP
- uiStringTimeSpanP ∷ Parser String UIString
- uiStringTimeSpanP = UIStringTimeSpan <$> timeSpanP
- uiStringJobFlexP ∷ Parser String UIString
- uiStringJobFlexP = UIStringJobFlex <$> jobFlexP
- uiStringPlainP ∷ Parser String UIString
- uiStringPlainP = UIStringPlain <$> rest
|