module Morley.Michelson.Parser.Common
( viewName_
) where
import Text.Megaparsec (anySingle, customFailure, manyTill)
import Text.Megaparsec.Char (string)
import Morley.Michelson.Parser.Error
import Morley.Michelson.Parser.Lexer
import Morley.Michelson.Parser.Types
import Morley.Michelson.Untyped
viewName_ :: Parser le ViewName
viewName_ :: Parser' le ViewName
viewName_ = Parser le ViewName -> Parser le ViewName
forall le a. Parser le a -> Parser le a
lexeme do
Tokens Text
-> ReaderT le (Parsec CustomParserException Text) (Tokens Text)
forall e s (m :: * -> *).
MonadParsec e s m =>
Tokens s -> m (Tokens s)
string Tokens Text
"\""
[Char]
str <- ReaderT le (Parsec CustomParserException Text) Char
-> ReaderT le (Parsec CustomParserException Text) Text
-> ReaderT le (Parsec CustomParserException Text) [Char]
forall (m :: * -> *) a end. MonadPlus m => m a -> m end -> m [a]
manyTill ReaderT le (Parsec CustomParserException Text) Char
forall e s (m :: * -> *). MonadParsec e s m => m (Token s)
anySingle (Tokens Text
-> ReaderT le (Parsec CustomParserException Text) (Tokens Text)
forall e s (m :: * -> *).
MonadParsec e s m =>
Tokens s -> m (Tokens s)
string Tokens Text
"\"")
Text -> Either BadViewNameError ViewName
mkViewName ([Char] -> Text
forall a. ToText a => a -> Text
toText [Char]
str)
Either BadViewNameError ViewName
-> (Either BadViewNameError ViewName -> Parser' le ViewName)
-> Parser' le ViewName
forall a b. a -> (a -> b) -> b
& (BadViewNameError -> Parser' le ViewName)
-> (ViewName -> Parser' le ViewName)
-> Either BadViewNameError ViewName
-> Parser' le ViewName
forall a c b. (a -> c) -> (b -> c) -> Either a b -> c
either (CustomParserException -> Parser' le ViewName
forall e s (m :: * -> *) a. MonadParsec e s m => e -> m a
customFailure (CustomParserException -> Parser' le ViewName)
-> (BadViewNameError -> CustomParserException)
-> BadViewNameError
-> Parser' le ViewName
forall b c a. (b -> c) -> (a -> b) -> a -> c
. BadViewNameError -> CustomParserException
ViewNameException) ViewName -> Parser' le ViewName
forall (f :: * -> *) a. Applicative f => a -> f a
pure