mirror of
https://github.com/unclechu/gRPC-haskell.git
synced 2024-11-05 18:59:42 +01:00
27 lines
1 KiB
Haskell
27 lines
1 KiB
Haskell
|
{-# LANGUAGE DataKinds #-}
|
||
|
{-# LANGUAGE DeriveGeneric #-}
|
||
|
{-# LANGUAGE LambdaCase #-}
|
||
|
{-# LANGUAGE OverloadedStrings #-}
|
||
|
{-# LANGUAGE TypeOperators #-}
|
||
|
|
||
|
import Data.Monoid ((<>))
|
||
|
import Data.Protobuf.Wire.DotProto.Generate
|
||
|
import Filesystem.Path.CurrentOS (encodeString)
|
||
|
import Options.Generic
|
||
|
import Prelude hiding (FilePath)
|
||
|
import Turtle (FilePath)
|
||
|
|
||
|
data Args = Args
|
||
|
{ proto :: FilePath <?> "Path to input .proto file"
|
||
|
} deriving (Generic, Show)
|
||
|
instance ParseRecord Args
|
||
|
|
||
|
main :: IO ()
|
||
|
main = do
|
||
|
protoPath <- encodeString . unHelpful . proto <$> getRecord "Dumps a compiled .proto file to stdout"
|
||
|
readDotProtoWithContext protoPath >>= \case
|
||
|
Left err -> fail (show err)
|
||
|
Right (dp, ctx) -> case renderHsModuleForDotProto dp ctx of
|
||
|
Left err -> fail ("Error compiling " <> protoPath <> ": " <> show err)
|
||
|
Right src -> putStrLn src
|