diff --git a/tools/gen_signatures_registry.ml b/tools/gen_signatures_registry.ml index 15dd0ad8..39804093 100644 --- a/tools/gen_signatures_registry.ml +++ b/tools/gen_signatures_registry.ml @@ -57,38 +57,40 @@ type purpose = { comment: string; } -let f records = - records - |> List.filter_map (fun l -> - match l with - | a :: b :: c :: _ -> ( - match a.k = "Number" && b.k = "Name" && c.k = "Comment" with - | false -> None - | true -> - Some - { - number= Int32.of_int (int_of_string a.v); - name= b.v; - comment= c.v; - }) - | _ -> None) - |> - (*GNU Taler, >= 1000*) - List.filter (fun v -> v.number >= 1000_l) - let read_file file = In_channel.with_open_bin file In_channel.input_all -let file_header = {|...|} let () = let content = read_file "registry.rec" in match parse content with | Error msg -> Fmt.failwith "Parse error: %s" msg | Ok records -> - let purposes = f records in + let purposes = + records + |> List.filter_map (fun l -> + match l with + | a :: b :: c :: _ -> ( + match a.k = "Number" && b.k = "Name" && c.k = "Comment" with + | false -> None + | true -> + Some + { + number= Int32.of_int (int_of_string a.v); + name= b.v; + comment= c.v; + }) + | _ -> None) + |> List.filter (fun v -> v.number >= 1000_l) + in + + let header = + {|(* This file was generated from the GANA database: + https://git-www.gnunet.org/gana.git/tree/gnunet-signatures/registry.rec *) + |} + in let pp_purpose ppf { number; name; comment } = Fmt.pf ppf "(** %s *)\nlet %s : int32 = %ld\n\n" comment name number in - Fmt.pr "%a@." (Fmt.list ~sep:Fmt.nop pp_purpose) purposes; + Fmt.pr "%s\n\n%a@." header (Fmt.list ~sep:Fmt.nop pp_purpose) purposes; ()