{-# LANGUAGE OverloadedStrings #-} {-# LANGUAGE ScopedTypeVariables #-} module Main where import Control.Monad.Trans.Except import qualified Data.Aeson as J import Data.Monoid import Data.Int import Data.Text import Kafka.Avro import Message exampleMessage = TestMessage 1 "Example" True 12345678 data AppError = EncError EncodeError | DecError DecodeError deriving (Show) main :: IO () main = do sr <- schemaRegistry "http://localhost:8081" res <- runExceptT $ roundtrip sr print res roundtrip :: SchemaRegistry -> ExceptT AppError IO TestMessage roundtrip sr = do enc <- withExceptT EncError (encode' exampleMessage) dec <- withExceptT DecError (decode' enc) return dec where encode' msg = ExceptT $ encode sr (Subject "example-subject") exampleMessage decode' msg = ExceptT $ decode sr msg