self(auto)- documenting encoders and decoders
Go to file
2021-11-17 13:40:30 +01:00
.github upgrade ci 2021-11-06 12:47:58 +01:00
autodocodec made enumCodec more general 2021-11-17 13:40:30 +01:00
autodocodec-api-usage combine nested bimap codecs 2021-11-17 01:09:05 +01:00
autodocodec-openapi3 Trying choice for objects again 2021-11-16 21:17:38 +01:00
autodocodec-schema make multiple alternatives object schemas look good too 2021-11-17 01:06:32 +01:00
autodocodec-swagger2 trying to implement choice for objects 2021-11-16 17:37:51 +01:00
autodocodec-yaml rename both to all in object schemas 2021-11-17 00:59:20 +01:00
nix working around an old ghc bug 2021-11-08 16:21:35 +01:00
.gitignore trying a thing 2021-10-20 17:59:50 +02:00
.hlint.yaml eithercodec for objectcodecs, it's a bit cursed but maybe that's ok? 2021-11-13 16:00:56 +01:00
ci.nix build fewer versions on ci because the haddocks are quite stupid about it 2021-10-30 13:00:37 +02:00
default.nix Trying to set up CI 2021-10-24 19:21:59 +02:00
LICENSE trying a thing 2021-10-24 19:29:57 +02:00
README.md readme fixup 2021-11-11 13:52:24 +01:00
shell.nix Added doctest for sustainable documentation 2021-11-16 01:47:12 +01:00
stack.yaml rename autodocodec-aeson-schema to autodocodec-schema 2021-11-06 15:06:32 +01:00

Autodocodec

Autodocodec is short for "self(auto)- documenting encoder and decoder".

In short: You write a single instance, of the 'Codec' type-class, for your type, and you get:

See the golden test directory directory for example outputs.

Features

  • ✓ Correct-by-construction encoding and decoding, without generating code.
  • ✓ Generate automatically-correct documentation from code.
  • ✓ Support for recursive types.

State of this project

This project is ready to try out!

data Example = Example
  { exampleTextField :: !Text,
    exampleIntField :: !Int
  }
  deriving stock (Show, Eq, Generic)
  deriving
    ( FromJSON, -- <- FromJSON instance for free.
      ToJSON, -- <- ToJSON instance for free.
      Swagger.ToSchema, -- <- Swagger schema for free.
      OpenAPI.ToSchema -- <- OpenAPI schema for free.
    )
    via (Autodocodec Example)

instance HasCodec Example where
  codec =
    object "Example" $
      Example
        <$> requiredField "text" "documentation for the text field" .= exampleTextField
        <*> requiredField "int" "documentation for the int field" .= exampleIntField

Tests

While we don't provide any actual guarantees, we do have tests for the following properties that we would like to maintain: