package ppx_protocol_conv
Install
Dune Dependency
Authors
Maintainers
Sources
sha256=ee9c4e805bacb7cd1430c1173ee9a245255379545553bbc9f4722ee4fbee0b5e
md5=7d084e16ce4949932ee5ebdd6c79baa6
Description
Ppx_protocol_conv generates code to serialise and de-serialise types. The ppx itself does not contain any protocol specific code, but relies on 'drivers' that defines serialisation and de-serialisation of basic types and structures.
Pre-defined drivers are available in separate packages: ppx_protocol_conv_json (Yojson.Safe.json) ppx_protocol_conv_msgpack (Msgpck.t)(Xml.xml) ppx_protocol_conv_xml-light (Xml.xml) ppx_protocol_conv_yaml (Yaml.t)
Published: 28 Mar 2018
README
Ppx Protocol Conv
Ppx protocol conv (de)serialisers using deriving, which allows for plugable (de)serialisers.
Example Usage
open Protocol_conv
open Protocol_conv_json
type a = {
x: int;
y: string [@key "Y"]
} [@@deriving protocol ~driver:(module Json) ~flags:(`Mangle Json.mangle)]
type b = A of int
| B of int [@key "b"]
| C
[@@deriving protocol ~driver:(module Json)]
will generate the functions:
val a_to_json: a -> Json.t
val a_of_json: Json.t -> a
val b_to_json: a -> Json.t
val b_of_json: Json.t -> a
a_to_json { x=42; y:"really" }
Evaluates to
[ "x", `Int 42; "Y", `String "really"] (* Yojson.Safe.json *)
to_protocol
deriver will generate serilization of the type. of_protocol
deriver generates de-serilization of the type, while protocol
deriver will generate both serilizarion and de-serilization functions.
Flags can be specified using the driver argument ~flags. For the json module, the mangle
function transforms record label names to be lower camelcase: a_bc_de -> aBcDe and a_bc_de_ -> aBcDe. Beware that this may cause name collisions, which can only be determined at compile time.
Attributes
Record label names can be changed using [@key <string>]
Variant constructors names can also be changed using the [@key <string>]
attribute.
Signatures
The ppx also handles signature, but disallows [@key ...]
and ~flags:...
as these does not impact signatures.
Drivers
The protocol deriver implements:
Json
which serializes toYojson.Safe.t
Xml_light
which serializes toXml.xml list
Msgpack
which serializes toMsgpck.t
Custom drivers
It should be easy to provide custom drivers by implementing the signature:
include Lib.Driver with type t = ... and type flags = ...
See the drivers directory for examples on how to implemented new drivers. Submissions of useful drivers are welcome
Limitations
The json driver will currently serialize type t option option
as t option
. This means that Some None
and None
is both mapped to Null
.
Dependencies (7)
-
ppx_metaquot
build
-
jbuilder
>= "1.0+beta9"
- ppx_core
- ppx_driver
- ppx_type_conv
-
base
< "v0.14"
-
ocaml
>= "4.04"
Dev Dependencies (5)
Used by (5)
-
ppx_deriving_protocol
>= "0.8.1"
-
ppx_protocol_conv_json
< "3.1.0"
-
ppx_protocol_conv_msgpack
< "3.1.0"
-
ppx_protocol_conv_xml_light
< "3.1.0"
-
ppx_protocol_conv_yaml
< "3.1.0"
Conflicts
None