OCaml wire format DSL with EverParse 3D output for verified parsers
1(** Code generation for EverParse differential testing.
2
3 Generates .3d files from Wire schemas, invokes EverParse, and produces C
4 stubs, OCaml externals, and a test runner for comparing OCaml codecs against
5 EverParse-generated C parsers.
6
7 {b Typical usage:}
8 {[
9 (* In gen_c.ml *)
10 let schemas =
11 [
12 Diff_gen.schema ~name:"MyFrame" ~struct_:My_3d.frame_struct
13 ~module_:My_3d.frame_module
14 |> Option.get;
15 ]
16
17 let () = Diff_gen.generate ~schema_dir:"schemas" ~outdir:"." schemas
18 ]} *)
19
20type schema
21(** A schema bundles a Wire struct, module, and computed wire size. *)
22
23val schema :
24 name:string -> struct_:Wire.struct_ -> module_:Wire.module_ -> schema option
25(** [schema ~name ~struct_ ~module_] creates a schema if the struct has a known
26 fixed wire size. Returns [None] for variable-length structs. *)
27
28(** {1 Full Pipeline} *)
29
30val generate :
31 schema_dir:string -> outdir:string -> ?num_values:int -> schema list -> unit
32(** [generate ~schema_dir ~outdir schemas] runs the full pipeline: 1. Generates
33 .3d files in [schema_dir] 2. Invokes EverParse to produce C parsers 3.
34 Generates [stubs.c], [stubs.ml], [diff_test.ml] in [outdir]
35
36 Requires EverParse installed at [~/.local/everparse/]. *)
37
38(** {1 Individual Steps} *)
39
40val generate_3d_files : schema_dir:string -> schema list -> unit
41
42val run_everparse : schema_dir:string -> unit
43(** [run_everparse ~schema_dir] runs EverParse on all [.3d] files in
44 [schema_dir]. *)
45
46val generate_c_stubs : schema_dir:string -> outdir:string -> schema list -> unit
47(** [generate_c_stubs ~schema_dir ~outdir schemas] generates a C stubs file in
48 [outdir]. *)
49
50val generate_ml_stubs : outdir:string -> schema list -> unit
51(** [generate_ml_stubs ~outdir schemas] generates an OCaml stubs file in
52 [outdir]. *)
53
54val generate_test_runner :
55 outdir:string -> ?num_values:int -> schema list -> unit
56(** [generate_test_runner ~outdir ?num_values schemas] generates a differential
57 test runner in [outdir]. *)