struct
  type t = {
    name : string;
    version : [`V_0_1_6_beta | `V_2_0_2_beta];
  }
  let to_json {name; version}: Yojson.Basic.json =
    `Assoc [
      "name"`String name;
      "version",
      (match version with
      |`V_0_1_6_beta -> `String "V_0_1_6_beta"
      |`V_2_0_2_beta -> `String "V_2_0_2_beta");
    ]
  let default_v1 = {name = "default_v1"; version = `V_0_1_6_beta}
  let default_v2 = {name = "default_v2"; version = `V_2_0_2_beta}
  let get_tool t =
    let open Machine.Tool.Default in
    match t.version with
    |`V_0_1_6_beta -> hisat
    |`V_2_0_2_beta -> hisat2
  let name t = t.name
end