packages feed

dataframe-learn-2.5.0.0: src/DataFrame/Transform/Serialize.hs

-- | Persist and reload a fitted Transform.
module DataFrame.Transform.Serialize (
    encodeTransform,
    decodeTransform,
    saveTransformToFile,
    loadTransformFromFile,
) where

import qualified Data.Aeson as Aeson

import DataFrame.Expr.Serialize (
    decodeNamedExprs,
    encodeNamedExprs,
    loadPipelineFromFile,
    savePipelineToFile,
 )
import DataFrame.Transform (Transform (..))

-- | Encode a transform's output expressions to JSON.
encodeTransform :: Transform -> Either String Aeson.Value
encodeTransform = encodeNamedExprs . transformOutputs

-- | Decode a transform produced by 'encodeTransform'.
decodeTransform :: Aeson.Value -> Either String Transform
decodeTransform = fmap Transform . decodeNamedExprs

-- | Encode a transform and write it to a file. No file is written on failure.
saveTransformToFile :: FilePath -> Transform -> IO (Either String ())
saveTransformToFile fp = savePipelineToFile fp . transformOutputs

-- | Load a transform produced by 'saveTransformToFile'.
loadTransformFromFile :: FilePath -> IO (Either String Transform)
loadTransformFromFile fp = fmap (fmap Transform) (loadPipelineFromFile fp)