.B "#include <mLib/base32.h>"
.B "#include <mLib/hex.h>"
+.B "#define CDCF_LOWERC ..."
+.B "#define CDCF_IGNCASE ..."
+.B "#define CDCF_NOEQPAD ..."
+.B "#define CDCF_IGNEQPAD ..."
+.B "#define CDCF_IGNEQMID ..."
+.B "#define CDCF_IGNZPAD ..."
+.B "#define CDCF_IGNNEWL ..."
+.B "#define CDCF_IGNINVCH ..."
+.B "#define CDCF_IGNSPC ..."
+.B "#define CDCF_IGNJUNK ..."
+
+.ta 2n
+.B "enum {"
+.B " CDCERR_OK = ...,"
+.B " CDCERR_INVCH = ...,"
+.B " CDCERR_INVEQPAD = ...,"
+.B " CDCERR_INVZPAD = ..."
+.B "};"
+
+.B "typedef struct {"
+.B " const char *name;"
+.ta 2n +\w'\fBcodec *(*encoder)('u
+.BI " codec *(*encoder)(unsigned " flags ,
+.BI " const char *" indent ", unsigned " maxlen );
+.BI " codec *(*decoder)(unsigned " flags );
+.B " ...\&"
+.B "} codec_class;"
+
+.B "typedef struct {"
+.B " const codec_ops *ops;"
+.B "} codec;"
+
+.B "typedef struct {"
+.B " const codec_class *c;"
+.BI " int (*code)(codec *" c ", const void *" p ", size_t " sz ", dstr *" d );
+.BI " void (*destroy)(codec *" c );
+.B "} codec_ops;"
+
.B "codec_class null_codec_class;"
.B "codec_class base64_class, file64_class, base64url_class;"
.B "codec_class base32_class, base32hex_class;"