module Reddit.Parser
( ensureKind
, stripPrefix ) where
import Control.Monad (guard)
import Data.Aeson.Types (Parser, Object, (.:))
import Data.Monoid
import Data.Text (Text)
import Prelude
import qualified Data.Text as Text
ensureKind :: Object -> Text -> Parser ()
ensureKind :: Object -> Text -> Parser ()
ensureKind Object
o Text
k = do
Text
kind <- Object
o Object -> Key -> Parser Text
forall a. FromJSON a => Object -> Key -> Parser a
.: Key
"kind"
Bool -> Parser ()
forall (f :: * -> *). Alternative f => Bool -> f ()
guard (Bool -> Parser ()) -> Bool -> Parser ()
forall a b. (a -> b) -> a -> b
$ Text
kind Text -> Text -> Bool
forall a. Eq a => a -> a -> Bool
== Text
k
stripPrefix :: Text -> Text -> Parser Text
stripPrefix :: Text -> Text -> Parser Text
stripPrefix Text
prefix Text
string =
case Text -> Text -> (Text, Text)
Text.breakOn Text
"_" Text
string of
(Text
t, Text
i) | Text
t Text -> Text -> Bool
forall a. Eq a => a -> a -> Bool
== Text
prefix ->
case Text -> Text -> Maybe Text
Text.stripPrefix Text
"_" Text
i of
Just Text
rest -> Text -> Parser Text
forall (m :: * -> *) a. Monad m => a -> m a
return Text
rest
Maybe Text
Nothing -> Parser Text
forall a. Monoid a => a
mempty
(Text
i, Text
"") -> Text -> Parser Text
forall (m :: * -> *) a. Monad m => a -> m a
return Text
i
(Text, Text)
_ -> Parser Text
forall a. Monoid a => a
mempty