language-avro: Language definition and parser for AVRO files.

[ apache, library, network ] [ Propose Tags ]

Parser for the AVRO language specification, see README.md for more details.


[Skip to Readme]
Versions [faq] 0.1.0.0, 0.1.1.0, 0.1.2.0, 0.1.3.0, 0.1.3.1
Dependencies avro (>=0.5.1), base (>=4.12 && <5), containers, directory, filepath, megaparsec, text, vector [details]
License Apache-2.0
Copyright Copyright © 2019-2020 <http://47deg.com 47 Degrees>
Author Flavio Corpa
Maintainer flavio.corpa@47deg.com
Category Network
Home page https://github.com/kutyel/avro-parser-haskell#readme
Uploaded by FlavioCorpa at 2020-04-01T08:54:42Z
Distributions NixOS:0.1.3.1
Downloads 670 total (119 in the last 30 days)
Rating 2.0 (votes: 1) [estimated by Bayesian average]
Your Rating
  • λ
  • λ
  • λ
Status Hackage Matrix CI
Docs uploaded by user
Build status unknown [no reports yet]

Modules

[Index] [Quick Jump]

Downloads

Maintainer's Corner

For package maintainers and hackage trustees


Readme for language-avro-0.1.3.1

[back to package description]

avro-parser-haskell

Actions Status Hackage Stackage Nightly Stackage LTS ormolu

Language definition and parser for AVRO (.avdl) files.

Example

#!/usr/bin/env stack
-- stack --resolver lts-15.0 script --package language-avro,megaparsec,pretty-simple

module Main where

import Language.Avro.Parser (readWithImports)
import Text.Megaparsec.Error (ShowErrorComponent (..), errorBundlePretty)
import Text.Pretty.Simple (pPrint)

instance ShowErrorComponent Char where
  showErrorComponent = show

main :: IO ()
main =
  readWithImports "test" "PeopleService.avdl"
    >>= either (putStrLn . errorBundlePretty) pPrint
-- λ>
-- 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 { logicalTypeS = Nothing }
--                   , fldDefault = Nothing
--                   }
--               , Field
--                   { fldName = "age"
--                   , fldAliases = []
--                   , fldDoc = Nothing
--                   , fldOrder = Nothing
--                   , fldType = Int { logicalTypeI = Nothing }
--                   , fldDefault = Nothing
--                   }
--               ]
--           }
--       , Record
--           { name = "NotFoundError"
--           , aliases = []
--           , doc = Nothing
--           , order = Nothing
--           , fields =
--               [ Field
--                   { fldName = "message"
--                   , fldAliases = []
--                   , fldDoc = Nothing
--                   , fldOrder = Nothing
--                   , fldType = String { logicalTypeS = Nothing }
--                   , fldDefault = Nothing
--                   }
--               ]
--           }
--       , Record
--           { name = "DuplicatedPersonError"
--           , aliases = []
--           , doc = Nothing
--           , order = Nothing
--           , fields =
--               [ Field
--                   { fldName = "message"
--                   , fldAliases = []
--                   , fldDoc = Nothing
--                   , fldOrder = Nothing
--                   , fldType = String { logicalTypeS = Nothing }
--                   , fldDefault = Nothing
--                   }
--               ]
--           }
--       , Record
--           { name = "PeopleRequest"
--           , aliases = []
--           , doc = Nothing
--           , order = Nothing
--           , fields =
--               [ Field
--                   { fldName = "name"
--                   , fldAliases = []
--                   , fldDoc = Nothing
--                   , fldOrder = Nothing
--                   , fldType = String { logicalTypeS = Nothing }
--                   , 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"!