packages feed

mu-avro-0.3.0.0: test/Avro.hs

{-# language DataKinds          #-}
{-# language DerivingVia        #-}
{-# language OverloadedStrings  #-}
{-# language StandaloneDeriving #-}
{-# language TypeApplications   #-}
{-# options_ghc -fno-warn-orphans #-}
module Main where

import           Data.Avro
import qualified Data.ByteString.Lazy as BS
import           System.Environment

import           Mu.Adapter.Avro      ()
import           Mu.Schema            (WithSchema (..))
import           Mu.Schema.Examples

exampleAddress :: Address
exampleAddress = Address "1111BB" "Spain"

examplePerson1, examplePerson2 :: Person
examplePerson1 = Person "Haskellio" "Gomez" (Just 30) (Just Male) exampleAddress [1,2,3]
examplePerson2 = Person "Cuarenta" "Siete" Nothing Nothing exampleAddress []

deriving via (WithSchema ExampleSchema "person" Person) instance HasAvroSchema Person
deriving via (WithSchema ExampleSchema "person" Person) instance FromAvro Person
deriving via (WithSchema ExampleSchema "person" Person) instance ToAvro Person

main :: IO ()
main = do -- Obtain the filenames
  [genFile, conFile] <- getArgs
  -- Read the file produced by Python
  putStrLn "haskell/consume"
  cbs <- BS.readFile conFile
  let people = decodeContainer @Person cbs
  print people
  -- Encode a couple of values
  putStrLn "haskell/generate"
  print [examplePerson1, examplePerson2]
  gbs <- encodeContainer nullCodec [[examplePerson1, examplePerson2]]
  BS.writeFile genFile gbs