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

This is a package candidate release! Here you can preview how this package release will appear once published to the main package index (which can be accomplished via the 'maintain' link below). Please note that once a package has been published to the main package index it cannot be undone! Please consult the package uploading documentation for more information.

[maintain] [Publish]

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


[Skip to Readme]

Properties

Versions 0.1.0.0, 0.1.1.0, 0.1.1.0, 0.1.2.0, 0.1.3.0, 0.1.3.1, 0.1.4.0
Change log None available
Dependencies avro (>=0.4.7), 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-02-25T09:26:40Z

Modules

[Index] [Quick Jump]

Downloads

Maintainer's Corner

Package maintainers

For package maintainers and hackage trustees


Readme for language-avro-0.1.1.0

[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"!