OCaml library for Crockford's Base32
at main 1.2 kB view raw
1(*--------------------------------------------------------------------------- 2 Copyright (c) 2025 Anil Madhavapeddy. All rights reserved. 3 SPDX-License-Identifier: MIT 4 ---------------------------------------------------------------------------*) 5 6let generate_doi prefix length split = 7 Random.self_init (); 8 let suffix = Crockford.generate ~length ~split_every:split ~checksum:true () in 9 Printf.printf "%s/%s\n%!" prefix suffix 10 11let () = 12 let open Cmdliner in 13 14 let prefix = 15 let doc = "DOI prefix to use (e.g., 10.59350)" in 16 Arg.(value & opt string "10.59350" & info ["p"; "prefix"] ~docv:"PREFIX" ~doc) 17 in 18 19 let length = 20 let doc = "Total length of the generated suffix (including checksum)" in 21 Arg.(value & opt int 10 & info ["l"; "length"] ~docv:"LENGTH" ~doc) 22 in 23 24 let split = 25 let doc = "Split the suffix every N characters with hyphens (0 = no splitting)" in 26 Arg.(value & opt int 5 & info ["s"; "split"] ~docv:"SPLIT" ~doc) 27 in 28 29 let generate_cmd = 30 let doc = "Generate a random DOI with Crockford base32 encoding" in 31 let info = Cmd.info "roguedoi" ~version:"1.0.0" ~doc in 32 Cmd.v info Term.(const generate_doi $ prefix $ length $ split) 33 in 34 35 exit (Cmd.eval generate_cmd)