Skip to content

Commit

Permalink
PLT-6750: JSON is a subset of YAML
Browse files Browse the repository at this point in the history
  • Loading branch information
yveshauser committed Aug 23, 2023
1 parent d87c0ab commit 7f5b316
Show file tree
Hide file tree
Showing 2 changed files with 16 additions and 6 deletions.
5 changes: 3 additions & 2 deletions marlowe-cli/command/Language/Marlowe/CLI/Command/Format.hs
Expand Up @@ -30,6 +30,7 @@ import Language.Marlowe.CLI.Format (
maybeWriteYaml,
readContractJson,
readContractPretty,
readContractYaml,
)
import Language.Marlowe.CLI.Types (CliError (..))
import Options.Applicative qualified as O
Expand Down Expand Up @@ -62,14 +63,14 @@ runFormatCommand Format{..} =
do
contract <- case inFormat of
Just Json -> readContractJson inputFile
Just Yaml -> readContractJson inputFile
Just Yaml -> readContractYaml inputFile
Just Pretty -> readContractPretty inputFile
Nothing ->
case inputFile of
Just fileName ->
case takeExtension fileName of
".json" -> readContractJson inputFile
".yaml" -> readContractJson inputFile
".yaml" -> readContractYaml inputFile
".marlowe" -> readContractPretty inputFile
_ -> readContractJson inputFile
Nothing -> readContractJson inputFile
Expand Down
17 changes: 13 additions & 4 deletions marlowe-cli/src/Language/Marlowe/CLI/Format.hs
Expand Up @@ -18,12 +18,12 @@ module Language.Marlowe.CLI.Format (
maybeWriteYaml,
readContractPretty,
readContractJson,
readContractYaml,
contractParser,
) where

import Control.Monad.Combinators as C
import Control.Monad.Except (MonadError, MonadIO, liftEither, liftIO)
import Data.Aeson (eitherDecodeStrict)
import Data.Bifunctor (first)
import Data.ByteString.Base16 qualified as Base16
import Data.ByteString.Char8 qualified as BS (getContents, pack)
Expand All @@ -33,6 +33,7 @@ import Data.String (IsString (..))
import Data.Text (Text)
import Data.Text.IO qualified as T
import Data.Void
import Data.Yaml qualified as Yaml (decodeEither')
import GHC.Generics (Generic (..))
import Language.Marlowe.CLI.IO (decodeFileStrict, maybeWriteJson, maybeWriteYaml)
import Language.Marlowe.CLI.Types (CliError (..))
Expand Down Expand Up @@ -68,10 +69,18 @@ readContractJson
=> (MonadIO m)
=> Maybe FilePath
-> m Contract
readContractJson (Just inputFile) =
readContractJson = readContractYaml

-- | Read a Marlowe Contract as YAML from a file.
readContractYaml
:: (MonadError CliError m)
=> (MonadIO m)
=> Maybe FilePath
-> m Contract
readContractYaml (Just inputFile) =
decodeFileStrict inputFile
readContractJson Nothing =
(liftEither . first (CliError . show)) . eitherDecodeStrict
readContractYaml Nothing =
(liftEither . first (CliError . show)) . Yaml.decodeEither'
=<< liftIO BS.getContents

-- | Read a pretty printed Marlowe Contract from a file.
Expand Down

0 comments on commit 7f5b316

Please sign in to comment.