avro-parser-haskell
Language definition and parser for AVRO (.avdl
) files.
Example
#! /usr/bin/env runhaskell
module Main where
import Language.Avro.Parser (readWithImports)
main :: IO ()
main = readWithImports "test" "PeopleService.avdl"
-- λ>
-- Right
-- (Protocol {
-- ns = Just (Namespace ["example","seed","server","protocol","avro"]),
-- pname = "PeopleService", imports = [IdlImport "People.avdl"],
-- types = [
-- Record {
-- name = "Person",
-- aliases = [],
-- doc = Nothing,
-- order = Nothing,
-- fields = [
-- Field {
-- fldName = "name",
-- fldAliases = [],
-- fldDoc = Nothing,
-- fldOrder = Nothing,
-- fldType = String,
-- fldDefault = Nothing
-- },
-- Field {
-- fldName = "age",
-- fldAliases = [],
-- fldDoc = Nothing,
-- fldOrder = Nothing,
-- fldType = Int,
-- fldDefault = Nothing
-- }
-- ]
-- },
-- Record {
-- name = "NotFoundError",
-- aliases = [],
-- doc = Nothing,
-- order = Nothing,
-- fields = [
-- Field {
-- fldName = "message",
-- fldAliases = [],
-- fldDoc = Nothing,
-- fldOrder = Nothing,
-- fldType = String,
-- fldDefault = Nothing
-- }
-- ]
-- },
-- Record {
-- name = "DuplicatedPersonError",
-- aliases = [],
-- doc = Nothing,
-- order = Nothing,
-- fields = [
-- Field {
-- fldName = "message",
-- fldAliases = [],
-- fldDoc = Nothing,
-- fldOrder = Nothing,
-- fldType = String,
-- fldDefault = Nothing
-- }
-- ]
-- },
-- Record {
-- name = "PeopleRequest",
-- aliases = [],
-- doc = Nothing,
-- order = Nothing,
-- fields = [
-- Field {
-- fldName = "name",
-- fldAliases = [],
-- fldDoc = Nothing,
-- fldOrder = Nothing,
-- fldType = String,
-- fldDefault = Nothing
-- }
-- ]
-- },
-- Record {
-- name = "PeopleResponse",
-- aliases = [],
-- doc = Nothing,
-- order = Nothing,
-- fields = [
-- Field {
-- fldName = "result",
-- fldAliases = [],
-- fldDoc = Nothing,
-- fldOrder = Nothing,
-- fldType = Union {options = [NamedType "Person",NamedType "NotFoundError",NamedType "DuplicatedPersonError"]},
-- fldDefault = Nothing
-- }
-- ]
-- }
-- ],
-- messages = [
-- Method {
-- mname = "getPerson",
-- args = [Argument {atype = NamedType "example.seed.server.protocol.avro.PeopleRequest", aname = "request"}],
-- result = NamedType "example.seed.server.protocol.avro.PeopleResponse",
-- throws = Null,
-- oneway = False
-- }
-- ]
-- })
⚠️ Warning: readWithImports
only works right now if the import type is "idl"
!