packages feed

cfn-flip-0.1.0.6: src/CfnFlip.hs

-- | Haskell re-implementation of [cfn_flip](https://github.com/awslabs/aws-cfn-template-flip/blob/837aa56e21cb00b1c7fa0150f0fd38365c508e4e/cfn_flip/yaml_dumper.py)
module CfnFlip
  ( yamlFileToJson
  , yamlToJson
  , jsonToYamlFile
  , jsonFileToYaml
  , jsonToYaml
  ) where

import CfnFlip.Prelude

import CfnFlip.Aeson
import qualified CfnFlip.JsonToYaml as JsonToYaml
import qualified CfnFlip.Yaml as Yaml
import qualified CfnFlip.YamlToJson as YamlToJson

-- | Read a file of Yaml and produce a @'FromJSON' a@
yamlFileToJson :: (MonadIO m, FromJSON a) => FilePath -> m a
yamlFileToJson = yamlToJson <=< readFileBinary

-- | Convert a 'ByteString' of Yaml to a @'FromJSON' a@
yamlToJson :: (MonadIO m, FromJSON a) => ByteString -> m a
yamlToJson = Yaml.decode YamlToJson.translate

-- | Write a @'ToJSON a@ to a file as Yaml
jsonToYamlFile :: (MonadUnliftIO m, ToJSON a) => FilePath -> a -> m ()
jsonToYamlFile path = writeFileBinary path <=< jsonToYaml

-- | Read a file of JSON and produce a 'ByteString' of Yaml
--
-- NB. The conversion occurs at 'Value'.
jsonFileToYaml :: MonadUnliftIO m => FilePath -> m ByteString
jsonFileToYaml = jsonToYaml @_ @Value <=< eitherDecodeFileStrictThrow

-- | Convert a 'ToJSON a' to a 'ByteString' of Yaml
jsonToYaml :: (MonadUnliftIO m, ToJSON a) => a -> m ByteString
jsonToYaml = Yaml.encode JsonToYaml.translate