Source file store_spec.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
(** Configuration information to set up a store. *)
open Lwt.Infix
type t = [
| `Btrfs of string
| `Zfs of string
]
let of_string s =
match Astring.String.cut s ~sep:":" with
| Some ("zfs", pool) -> Ok (`Zfs pool)
| Some ("btrfs", path) -> Ok (`Btrfs path)
| _ -> Error (`Msg "Store must start with zfs: or btrfs:")
let pp f = function
| `Zfs pool -> Fmt.pf f "zfs:%s" pool
| `Btrfs path -> Fmt.pf f "btrfs:%s" path
type store = Store : (module S.STORE with type t = 'a) * 'a -> store
let to_store = function
| `Btrfs path ->
Btrfs_store.create path >|= fun store ->
Store ((module Btrfs_store), store)
| `Zfs pool ->
Zfs_store.create ~pool >|= fun store ->
Store ((module Zfs_store), store)