Containers_codegenThe code generator library is designed to be used from a build system (for example, from dune) to generate efficient code for features that are harder to provide at runtime.
The idea is that the build system should invoke some OCaml script that depends on containers.codegen; the script uses the DSL below to describe what code to generate (e.g. a description of a bitfield type) and emits a .ml file (and possibly a .mli file).
For example, the build script might contain:
module CG = Containers_codegen
let () =
  let module B = CG.Bitfield in
  let b = B.make ~name:"t" () in
  B.field_bit b "x";
  B.field_bit b "y";
  B.field_bit b "z";
  B.field_int b ~width:5 "foo";
  CG.emit_file "foo.mli" [B.gen_mli b];
  CG.emit_file "foo.ml" [B.gen_ml b];
  ()and this will produce foo.ml and foo.mli with a bitfield containing x, y, and z.
module Fmt = CCFormatmodule Code : sig ... endmodule Bitfield : sig ... endval emit_file : string -> code list -> unitemit_file file cs emits code fragments cs into the given file at path file
val emit_chan : out_channel -> code list -> unitval emit_string : code list -> string