thrift-lib-0.1.0.1: Thrift/Util.hs
{-
Copyright (c) Meta Platforms, Inc. and affiliates.
All rights reserved.
This source code is licensed under the BSD-style license found in the
LICENSE file in the root directory of this source tree.
-}
module Thrift.Util
( loadJSON
, saveJSON
, ThriftException(..)
, prettyThrift
) where
import Control.Exception
import Data.Aeson
import Data.Aeson.Encode.Pretty
import qualified Data.ByteString as BS
import qualified Data.ByteString.Lazy.Char8 as LB
import Thrift.Protocol
import Thrift.Protocol.JSON
newtype ThriftException = ThriftException String
deriving Show
instance Exception ThriftException
-- | Load a Thrift value from a file using the PrettyJSON protocol
loadJSON :: ThriftSerializable a => FilePath -> IO a
loadJSON path = do
result <- deserializeJSON <$> BS.readFile path
case result of
Left err -> throwIO $ ThriftException $ "[" ++ path ++ "] " ++ err
Right struct -> return struct
-- | Save a Thrift value to a file using the PrettyJSON protocol
saveJSON :: ThriftSerializable a => FilePath -> a -> IO ()
saveJSON path value = BS.writeFile path $ serializePrettyJSON value
-- | Render a Thrift value as prettified JSON
prettyThrift :: ThriftSerializable a => a -> LB.ByteString
prettyThrift a =
case eitherDecode (LB.fromStrict (serializeJSON a)) of
Right obj -> encodePretty (obj :: Object)
Left err -> LB.pack err