route-generator 0.6 → 0.6.1
raw patch · 2 files changed
+29/−17 lines, 2 files
Files
- route-generator.cabal +1/−1
- routeGenerator.hs +28/−16
route-generator.cabal view
@@ -1,5 +1,5 @@ name: route-generator-version: 0.6+version: 0.6.1 cabal-version: >= 1.8 license: OtherLicense license-file: COPYING
routeGenerator.hs view
@@ -135,20 +135,20 @@ parser :: Parser [Route] parser = many1 $ do- skipSpace- m <- method- skipSpace- p <- pieces+ skipSpace'+ m <- method <?> "http method"+ skipSpace'+ p <- pieces <?> "path" multi <- fmap isJust $ option Nothing (fmap Just (char '*'))- skipSpace- _ <- char '='- _ <- char '>'- skipSpace- t <- target- skipWhile (\x -> isSpace x && not (isEndOfLine x))- endOfLine+ skipSpace'+ _ <- (char '=' >> char '>') <?> "=>"+ skipSpace'+ t <- target <?> "action"+ skipSpace'+ skipMany1 endOfLine <?> "newline" return $ Route m p multi t where+ skipSpace' = skipWhile (\x -> isSpace x && not (isEndOfLine x)) target = takeWhile1 (not . isSpace) method = takeWhile1 isUpper pieces = fmap catMaybes $ many1 $ do@@ -158,6 +158,17 @@ static = fmap Static (takeWhile1 (\x -> x /= '/' && x /= '*' && not (isSpace x))) dynamic = char ':' >> return Dynamic +myparse :: Parser a -> Text -> Either String a+myparse parser = format . parse (parser <* endOfInput)+ where+ format (Fail t [] "endOfInput") | T.last t /= '\n' =+ Left ("Unexpected end of input. Perhaps you are missing a newline? (" ++ show t ++ ")")+ format (Fail t [] msg) = Left (msg ++ " (" ++ show t ++ ")")+ format (Fail t (ctx:_) msg) =+ Left ("Error parsing " ++ ctx ++ ": " ++ msg ++ " (" ++ show t ++ ")")+ format (Partial k) = format (k T.empty)+ format (Done _ x) = Right x+ main :: IO () main = do (flags, args, errors) <- fmap (getOpt RequireOrder flags) getArgs@@ -169,12 +180,13 @@ _ | (Routes `notElem` flags) && (PathHelpers `notElem` flags) -> do hPutStrLn stderr "Must pass -r or -p" usage errors >> exitFailure- _ -> main' (head args) flags--main' :: FilePath -> [Flag] -> IO ()-main' input flags = do- Right routes <- fmap (parseOnly parser) $ T.readFile input+ _ -> myparse parser <$> T.readFile (head args) >>= main' flags +main' :: [Flag] -> Either String [Route] -> IO ()+main' _ (Left err) = do+ hPutStrLn stderr "Error in route syntax"+ hPutStrLn stderr err+main' flags (Right routes) = do when (Routes `elem` flags) $ do -- GHC pragma turns off warnings we know about -- Should be ignored by other compilers, so is safe