module Tokstyle.C.TravUtils where

import           Language.C.Analysis.TravMonad (MonadTrav, throwTravError)
import           Language.C.Data.Error         (userErr)
import           Prettyprinter                 (Doc, pretty)


getJust :: MonadTrav m => String -> Maybe a -> m a
getJust :: String -> Maybe a -> m a
getJust String
_ (Just a
ok) = a -> m a
forall (m :: * -> *) a. Monad m => a -> m a
return a
ok
getJust String
failMsg Maybe a
Nothing =
    UserError -> m a
forall (m :: * -> *) e a. (MonadCError m, Error e) => e -> m a
throwTravError (UserError -> m a) -> UserError -> m a
forall a b. (a -> b) -> a -> b
$ String -> UserError
userErr String
failMsg

backticks :: Doc ann -> Doc ann
backticks :: Doc ann -> Doc ann
backticks Doc ann
d = Char -> Doc ann
forall a ann. Pretty a => a -> Doc ann
pretty Char
'`' Doc ann -> Doc ann -> Doc ann
forall a. Semigroup a => a -> a -> a
<> Doc ann
d Doc ann -> Doc ann -> Doc ann
forall a. Semigroup a => a -> a -> a
<> Char -> Doc ann
forall a ann. Pretty a => a -> Doc ann
pretty Char
'`'

dquotes :: Doc ann -> Doc ann
dquotes :: Doc ann -> Doc ann
dquotes Doc ann
d = Char -> Doc ann
forall a ann. Pretty a => a -> Doc ann
pretty Char
'"' Doc ann -> Doc ann -> Doc ann
forall a. Semigroup a => a -> a -> a
<> Doc ann
d Doc ann -> Doc ann -> Doc ann
forall a. Semigroup a => a -> a -> a
<> Char -> Doc ann
forall a ann. Pretty a => a -> Doc ann
pretty Char
'"'