module Cardano.CLI.Json.Encode
  ( encodeJson
  , encodeYaml
  )
where

import Data.Aeson qualified as Aeson
import Data.Aeson.Encode.Pretty qualified as Aeson
import Data.ByteString.Lazy qualified as LBS
import Data.Yaml.Pretty qualified as Yaml

-- | Encode JSON with pretty printing.
encodeJson :: Aeson.ToJSON a => a -> LBS.ByteString
encodeJson :: forall a. ToJSON a => a -> ByteString
encodeJson =
  Config -> a -> ByteString
forall a. ToJSON a => Config -> a -> ByteString
Aeson.encodePretty' Config
jsonConfig

-- | Encode YAML with pretty printing.
encodeYaml :: Aeson.ToJSON a => a -> LBS.ByteString
encodeYaml :: forall a. ToJSON a => a -> ByteString
encodeYaml =
  StrictByteString -> ByteString
LBS.fromStrict (StrictByteString -> ByteString)
-> (a -> StrictByteString) -> a -> ByteString
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Config -> a -> StrictByteString
forall a. ToJSON a => Config -> a -> StrictByteString
Yaml.encodePretty Config
yamlConfig

jsonConfig :: Aeson.Config
jsonConfig :: Config
jsonConfig =
  Config
Aeson.defConfig
    { Aeson.confCompare = compare
    }

yamlConfig :: Yaml.Config
yamlConfig :: Config
yamlConfig =
  (Text -> Text -> Ordering) -> Config -> Config
Yaml.setConfCompare Text -> Text -> Ordering
forall a. Ord a => a -> a -> Ordering
compare Config
Yaml.defConfig