packages feed

hw-kafka-avro-1.2.0: example/Main.hs

{-# LANGUAGE OverloadedStrings   #-}
{-# LANGUAGE ScopedTypeVariables #-}
module Main where

import           Control.Monad.Trans.Except
import qualified Data.Aeson                 as J
import qualified Data.Avro                  as A
import           Data.Avro.Schema           as S
import qualified Data.Avro.Types            as AT
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 $ encodeWithSchema sr (Subject "example-subject") exampleMessage
    decode msg = ExceptT $ decodeWithSchema sr msg