{"id":18737037,"url":"https://github.com/higherkindness/avro-parser-haskell","last_synced_at":"2025-04-12T19:32:12.056Z","repository":{"id":44867981,"uuid":"234317969","full_name":"higherkindness/avro-parser-haskell","owner":"higherkindness","description":"Language definition and parser for AVRO (.avdl) files.","archived":false,"fork":false,"pushed_at":"2022-01-21T17:24:57.000Z","size":82,"stargazers_count":16,"open_issues_count":0,"forks_count":2,"subscribers_count":3,"default_branch":"master","last_synced_at":"2025-03-26T14:02:14.234Z","etag":null,"topics":["avro","avro-data","avro-format","avro-idl-files","avro-schemas","haskell","haskell-parser","parser"],"latest_commit_sha":null,"homepage":"https://hackage.haskell.org/package/language-avro","language":"Haskell","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/higherkindness.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2020-01-16T12:45:03.000Z","updated_at":"2023-12-30T21:56:15.000Z","dependencies_parsed_at":"2022-09-04T15:32:30.688Z","dependency_job_id":null,"html_url":"https://github.com/higherkindness/avro-parser-haskell","commit_stats":null,"previous_names":[],"tags_count":5,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/higherkindness%2Favro-parser-haskell","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/higherkindness%2Favro-parser-haskell/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/higherkindness%2Favro-parser-haskell/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/higherkindness%2Favro-parser-haskell/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/higherkindness","download_url":"https://codeload.github.com/higherkindness/avro-parser-haskell/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":248621247,"owners_count":21134787,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["avro","avro-data","avro-format","avro-idl-files","avro-schemas","haskell","haskell-parser","parser"],"created_at":"2024-11-07T15:23:27.165Z","updated_at":"2025-04-12T19:32:11.802Z","avatar_url":"https://github.com/higherkindness.png","language":"Haskell","funding_links":[],"categories":[],"sub_categories":[],"readme":"# avro-parser-haskell\n\n[![Actions Status](https://github.com/higherkindness/avro-parser-haskell/workflows/Haskell%20CI/badge.svg)](https://github.com/higherkindness/avro-parser-haskell/actions)\n[![Hackage](https://img.shields.io/hackage/v/language-avro.svg?logo=haskell)](https://hackage.haskell.org/package/language-avro)\n[![Stackage Nightly](http://stackage.org/package/language-avro/badge/nightly)](http://stackage.org/nightly/package/language-avro)\n[![Stackage LTS](http://stackage.org/package/language-avro/badge/lts)](http://stackage.org/lts/package/language-avro)\n![Hackage-Deps](https://img.shields.io/hackage-deps/v/language-avro?style=flat)\n[![ormolu](https://img.shields.io/badge/styled%20with-ormolu-blueviolet)](https://github.com/tweag/ormolu)\n\nLanguage definition and parser for AVRO (`.avdl`) files.\n\n## Example\n\n```haskell\n#!/usr/bin/env stack\n-- stack --resolver lts-18.19 script --package language-avro,pretty-simple\n\nmodule Main where\n\nimport Language.Avro.Parser (readWithImports)\nimport Text.Pretty.Simple (pPrint)\n\nmain :: IO ()\nmain =\n  readWithImports \"test\" \"PeopleService.avdl\"\n    \u003e\u003e= either putStrLn pPrint\n-- λ\u003e\n-- Protocol\n--   { ns = Just\n--       ( Namespace\n--           [ \"example\"\n--           , \"seed\"\n--           , \"server\"\n--           , \"protocol\"\n--           , \"avro\"\n--           ]\n--       )\n--   , pname = \"PeopleService\"\n--   , imports = [ IdlImport \"People.avdl\" ]\n--   , types =\n--       [ Record\n--           { name = \"Person\"\n--           , aliases = []\n--           , doc = Nothing\n--           , order = Nothing\n--           , fields =\n--               [ Field\n--                   { fldName = \"name\"\n--                   , fldAliases = []\n--                   , fldDoc = Nothing\n--                   , fldOrder = Nothing\n--                   , fldType = String { logicalTypeS = Nothing }\n--                   , fldDefault = Nothing\n--                   }\n--               , Field\n--                   { fldName = \"age\"\n--                   , fldAliases = []\n--                   , fldDoc = Nothing\n--                   , fldOrder = Nothing\n--                   , fldType = Int { logicalTypeI = Nothing }\n--                   , fldDefault = Nothing\n--                   }\n--               ]\n--           }\n--       , Record\n--           { name = \"NotFoundError\"\n--           , aliases = []\n--           , doc = Nothing\n--           , order = Nothing\n--           , fields =\n--               [ Field\n--                   { fldName = \"message\"\n--                   , fldAliases = []\n--                   , fldDoc = Nothing\n--                   , fldOrder = Nothing\n--                   , fldType = String { logicalTypeS = Nothing }\n--                   , fldDefault = Nothing\n--                   }\n--               ]\n--           }\n--       , Record\n--           { name = \"DuplicatedPersonError\"\n--           , aliases = []\n--           , doc = Nothing\n--           , order = Nothing\n--           , fields =\n--               [ Field\n--                   { fldName = \"message\"\n--                   , fldAliases = []\n--                   , fldDoc = Nothing\n--                   , fldOrder = Nothing\n--                   , fldType = String { logicalTypeS = Nothing }\n--                   , fldDefault = Nothing\n--                   }\n--               ]\n--           }\n--       , Record\n--           { name = \"PeopleRequest\"\n--           , aliases = []\n--           , doc = Nothing\n--           , order = Nothing\n--           , fields =\n--               [ Field\n--                   { fldName = \"name\"\n--                   , fldAliases = []\n--                   , fldDoc = Nothing\n--                   , fldOrder = Nothing\n--                   , fldType = String { logicalTypeS = Nothing }\n--                   , fldDefault = Nothing\n--                   }\n--               ]\n--           }\n--       , Record\n--           { name = \"PeopleResponse\"\n--           , aliases = []\n--           , doc = Nothing\n--           , order = Nothing\n--           , fields =\n--               [ Field\n--                   { fldName = \"result\"\n--                   , fldAliases = []\n--                   , fldDoc = Nothing\n--                   , fldOrder = Nothing\n--                   , fldType = Union\n--                       { options =\n--                           [ NamedType \"Person\"\n--                           , NamedType \"NotFoundError\"\n--                           , NamedType \"DuplicatedPersonError\"\n--                           ]\n--                       }\n--                   , fldDefault = Nothing\n--                   }\n--               ]\n--           }\n--       ]\n--   , messages =\n--       [ Method\n--           { mname = \"getPerson\"\n--           , args =\n--               [ Argument\n--                   { atype = NamedType \"example.seed.server.protocol.avro.PeopleRequest\"\n--                   , aname = \"request\"\n--                   }\n--               ]\n--           , result = NamedType \"example.seed.server.protocol.avro.PeopleResponse\"\n--           , throws = Null\n--           , oneway = False\n--           }\n--       ]\n--   }\n```\n\n⚠️ Warning: `readWithImports` only works right now if the import type is `\"idl\"`!\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fhigherkindness%2Favro-parser-haskell","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fhigherkindness%2Favro-parser-haskell","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fhigherkindness%2Favro-parser-haskell/lists"}