argo-0.2022.2.2: source/library/Argo/Encode.hs
module Argo.Encode where
import qualified Argo.Class.HasCodec as HasCodec
import qualified Argo.Codec.Value as Codec
import qualified Argo.Json.Value as Value
import qualified Argo.Literal as Literal
import qualified Argo.Pointer.Pointer as Pointer
import qualified Argo.Type.Config as Config
import qualified Argo.Type.Encoder as Encoder
import qualified Argo.Type.Indent as Indent
import qualified Argo.Vendor.Builder as Builder
import qualified Argo.Vendor.Transformers as Trans
import qualified Control.Monad as Monad
encode :: HasCodec.HasCodec a => a -> Builder.Builder
encode = encodeWith $ Indent.Spaces 0
encodeWith :: HasCodec.HasCodec a => Indent.Indent -> a -> Builder.Builder
encodeWith i x =
let c = Config.initial { Config.indent = i }
in
Encoder.run c $ do
Value.encode $ Codec.encodeWith HasCodec.codec x
Monad.when (Config.hasIndent c)
. Trans.lift
. Trans.tell
$ Builder.word8 Literal.newLine
encodePointer :: Pointer.Pointer -> Builder.Builder
encodePointer = Encoder.run Config.initial . Pointer.encode