diff --git a/src/App/Validation/Login.purs b/src/App/Validation/Login.purs index 0e808de..b8276d9 100644 --- a/src/App/Validation/Login.purs +++ b/src/App/Validation/Login.purs @@ -4,7 +4,6 @@ import Prelude import Control.Alt ((<|>)) import Data.Either (Either(..)) -import Data.String.CodeUnits as CU import Data.Maybe (Maybe(..)) import Data.Validation.Semigroup (V, invalid, toEither) @@ -32,12 +31,13 @@ parse (G.Parser p) str c = case p { string: str, position: 0 } of login_parser :: G.Parser LoginParsingError String login_parser = do - l <- G.many1 (alpha <|> digit) <|> G.Parser \i -> G.failureError i.position (Just CannotParse) - _ <- SomeParsers.eof <|> G.Parser \i -> G.failureError i.position (Just CannotEntirelyParse) + input <- G.current_input + _ <- G.many1 (alpha <|> digit) G.<:> \_ -> CannotParse + _ <- SomeParsers.eof G.<:> \_ -> CannotEntirelyParse pos <- G.current_position - if pos < min_login_size || pos > max_login_size - then G.Parser \i -> G.failureError i.position (Just $ Size min_login_size max_login_size pos) - else pure $ CU.fromCharArray l + if between min_login_size max_login_size pos + then pure input.string + else G.errorParser (Just $ Size min_login_size max_login_size pos) login :: String -> Either (Array Error) String login s = toEither $ parse login_parser s ParsingError