parent
ff62f3486e
commit
d8e076c6da
|
@ -35,8 +35,10 @@ import Options.Applicative (Parser, ParserInfo)
|
||||||
import System.Exit (exitFailure)
|
import System.Exit (exitFailure)
|
||||||
import System.IO (Handle)
|
import System.IO (Handle)
|
||||||
|
|
||||||
|
import qualified Codec.Serialise
|
||||||
import qualified Control.Exception
|
import qualified Control.Exception
|
||||||
import qualified Control.Monad.Trans.State.Strict as State
|
import qualified Control.Monad.Trans.State.Strict as State
|
||||||
|
import qualified Data.ByteString.Lazy
|
||||||
import qualified Data.Text
|
import qualified Data.Text
|
||||||
import qualified Data.Text.IO
|
import qualified Data.Text.IO
|
||||||
import qualified Data.Text.Prettyprint.Doc as Pretty
|
import qualified Data.Text.Prettyprint.Doc as Pretty
|
||||||
|
@ -82,6 +84,8 @@ data Mode
|
||||||
| Hash
|
| Hash
|
||||||
| Diff { expr1 :: Text, expr2 :: Text }
|
| Diff { expr1 :: Text, expr2 :: Text }
|
||||||
| Lint { inplace :: Maybe FilePath }
|
| Lint { inplace :: Maybe FilePath }
|
||||||
|
| Encode
|
||||||
|
| Decode
|
||||||
|
|
||||||
-- | `Parser` for the `Options` type
|
-- | `Parser` for the `Options` type
|
||||||
parseOptions :: Parser Options
|
parseOptions :: Parser Options
|
||||||
|
@ -154,6 +158,14 @@ parseMode =
|
||||||
"freeze"
|
"freeze"
|
||||||
"Add hashes to all import statements of an expression"
|
"Add hashes to all import statements of an expression"
|
||||||
(Freeze <$> optional parseInplace)
|
(Freeze <$> optional parseInplace)
|
||||||
|
<|> subcommand
|
||||||
|
"encode"
|
||||||
|
"Encode a Dhall expression to binary"
|
||||||
|
(pure Encode)
|
||||||
|
<|> subcommand
|
||||||
|
"decode"
|
||||||
|
"Decode a Dhall expression from binary"
|
||||||
|
(pure Decode)
|
||||||
<|> (Default <$> parseAnnotate)
|
<|> (Default <$> parseAnnotate)
|
||||||
where
|
where
|
||||||
argument =
|
argument =
|
||||||
|
@ -344,6 +356,26 @@ command (Options {..}) = do
|
||||||
|
|
||||||
renderDoc System.IO.stdout doc
|
renderDoc System.IO.stdout doc
|
||||||
|
|
||||||
|
Encode -> do
|
||||||
|
expression <- getExpression
|
||||||
|
|
||||||
|
let term = Dhall.Binary.encode protocolVersion expression
|
||||||
|
|
||||||
|
let bytes = Codec.Serialise.serialise term
|
||||||
|
|
||||||
|
Data.ByteString.Lazy.putStr bytes
|
||||||
|
|
||||||
|
Decode -> do
|
||||||
|
bytes <- Data.ByteString.Lazy.getContents
|
||||||
|
|
||||||
|
term <- throws (Codec.Serialise.deserialiseOrFail bytes)
|
||||||
|
|
||||||
|
expression <- throws (Dhall.Binary.decode term)
|
||||||
|
|
||||||
|
let doc = Dhall.Pretty.prettyCharacterSet characterSet expression
|
||||||
|
|
||||||
|
renderDoc System.IO.stdout doc
|
||||||
|
|
||||||
-- | Entry point for the @dhall@ executable
|
-- | Entry point for the @dhall@ executable
|
||||||
main :: IO ()
|
main :: IO ()
|
||||||
main = do
|
main = do
|
||||||
|
|
Loading…
Reference in New Issue
Block a user