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