-- SPDX-FileCopyrightText: 2021 Oxhead Alpha
-- SPDX-License-Identifier: LicenseRef-MIT-OA

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