Libraries
Macros and attributes
The hax engine understands only one attribute: #[_hax::json(PAYLOAD)],
where PAYLOAD is a JSON serialization of the Rust enum
hax_lib_macros_types::AttrPayload.
Note #[_hax::json(PAYLOAD)] is a tool
attribute: an
attribute that is never expanded.
In the engine, the OCaml module Attr_payloads offers an API to query
attributes easily. The types in crate hax_lib_macros_types and
corresponding serializers/deserializers are automatically generated in
OCaml, thus there is no manual parsing involved.
User experience
Asking the user to type #[_hax::json(some_long_json)] is not very
friendly. Thus, the crate hax-lib-macros defines a bunch of proc
macros
that defines nice and simple-to-use macros. Those macro take care of
cooking some hax_lib_macros_types::AttrPayload payload(s), then
serialize those payloads to JSON and produce one or more
#[_hax::json(serialized_payload)] attributes.