package typebeat
Install
Dune Dependency
Authors
Maintainers
Sources
sha256=8d4679ea5b3f2eebb44a847506f022b4c14ce659d6bc34ea5b025710ffd261e9
md5=03d8badc8ca7e9d2794b4cd3093d6d0c
Description
TypeBeat is a pure implementation of the parsing of the Content-Type
's value
(see RFC822 and
RFC2045). The reason of this light
library is to compute a complex rule. Indeed, it's hard to parse the value
of the Content-Type
, believe me.
So it's a common library if you want to know the value of the Content-Type
and
don't worry, we respect the standard. We saved
the IANA
database too.
Published: 03 Apr 2018
README
TypeBeat - Agnostic parser of the Content-Type
in OCaml
TypeBeat is a pure implementation of the parsing of the Content-Type
's value (see RFC822 and RFC2045). The reason of this light library is to compute a complex rule. Indeed, it's hard to parse the value of the Content-Type
, believe me.
So it's a common library if you want to know the value of the Content-Type
and don't worry, we respect the standard. We saved the IANA database too.
Instalation
TypeBeat can be installed with opam
:
opam install type-beat
Explanation
TypeBeat uses the cool and funny Angstrom library to parse the value of the Content-Type
. If you want to implement an email parser (like MrMime) or an HTTP server (CoHTTP), firstly, these already exist, too bad.
This parser handles complex rules like the CFWS
token and other weird rules from old and stupid RFCs. The point is to centralize all these parsers in one library (because you can find the Content-Type
crazy rule in some different protocols) .
Then, the API was designed to be easy to use:
val of_string : string -> (content, error) result
val of_string_raw : string -> int -> int -> (content * int, error) result
The first transforms its string
argument into a Content-Type
value. The second is generally used by another parser (like an HTTP protocol parser) to parse a part of the string
and return how many bytes the parser consumed.
If you are a warrior of the Angstrom library, you can use the parser:
val parser : content Angstrom.t
But the parser does not terminate because we have the CFWS
token at the end. What does that mean? The parser expects an End of input
or any character other than wsp
(and you can produce that by Angstrom.Unbuffered.Complete
) to check that the hypothetical next line is a new field. Because, as you know, we can write something like:
Content-Type: text/html;^CRLF
charset="utf-8"
And it is still valid (see RFC822)!
Another point is that this library has all of the IANA media types database (dated 2016-06-01), so we recognize the IANA media types automatically.
Build Requirements
OCaml >= 4.01.0
topkg
,ocamlfind
andocamlbuild
to build the project
Improvement
If you want something from the RFC822, I can provide that in this library.