gRPC-haskell/tools/compile-proto-file/Main.hs
Gabriel Gonzalez bff8fb7c7e Switch from protobuf-wire to proto3-suite (#92)
`protobuf-wire` was open sourced as `proto3-suite` (with a corresponding module
rename) so this change updates the dependency and import lists
2017-02-27 08:43:37 -08:00

26 lines
1 KiB
Haskell

{-# LANGUAGE DataKinds #-}
{-# LANGUAGE DeriveGeneric #-}
{-# LANGUAGE LambdaCase #-}
{-# LANGUAGE OverloadedStrings #-}
{-# LANGUAGE TypeOperators #-}
import Data.Monoid ((<>))
import Filesystem.Path.CurrentOS (encodeString)
import Options.Generic
import Proto3.Suite.DotProto.Generate
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