package mirage
Source file mirage_impl_kv.ml
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77open Functoria open Astring module Key = Mirage_key type ro = RO let ro = Type.v RO let crunch dirname = let is_valid = function | '0' .. '9' | 'a' .. 'z' | 'A' .. 'Z' -> true | _ -> false in let modname = String.filter is_valid dirname in let name = "Static_" ^ String.Ascii.lowercase modname in let packages = [ package ~min:"3.0.0" ~max:"4.0.0" "mirage-kv-mem"; package ~min:"3.1.0" ~max:"4.0.0" ~build:true "crunch"; ] in let connect _ modname _ = Fmt.str "%s.connect ()" modname in let dune _i = let dir = Fpath.(v dirname) in let file ext = Fpath.(v (String.Ascii.lowercase name) + ext) in let ml = file "ml" in let mli = file "mli" in let dune = Dune.stanzaf {| (rule (targets %a %a) (deps (source_tree %a)) (action (run ocaml-crunch -o %a %a))) |} Fpath.pp ml Fpath.pp mli Fpath.pp dir Fpath.pp ml Fpath.pp dir in [ dune ] in impl ~packages ~connect ~dune name ro let direct_kv_ro dirname = let packages = [ package ~min:"2.1.0" ~max:"3.0.0" "mirage-kv-unix" ] in let connect _ modname _names = Fmt.str "%s.connect \"%s\"" modname dirname in impl ~packages ~connect "Mirage_kv_unix" ro let direct_kv_ro dirname = match_impl Key.(value target) [ (`Xen, crunch dirname); (`Qubes, crunch dirname); (`Virtio, crunch dirname); (`Hvt, crunch dirname); (`Spt, crunch dirname); (`Muen, crunch dirname); (`Genode, crunch dirname); ] ~default:(direct_kv_ro dirname) type rw = RW let rw = Type.v RW let direct_kv_rw dirname = let packages = [ package ~min:"2.1.0" ~max:"3.0.0" "mirage-kv-unix" ] in let connect _ modname _names = Fmt.str "%s.connect \"%s\"" modname dirname in impl ~packages ~connect "Mirage_kv_unix" rw let mem_kv_rw_config = let packages = [ package ~min:"3.0.0" ~max:"4.0.0" "mirage-kv-mem" ] in let connect _ modname _names = Fmt.str "%s.connect ()" modname in impl ~packages ~connect "Mirage_kv_mem.Make" (Mirage_impl_pclock.pclock @-> rw) let mem_kv_rw ?(clock = Mirage_impl_pclock.default_posix_clock) () = mem_kv_rw_config $ clock