Source file connection.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
type conninfo =
  { host : string
  ; user : string
  ; pass : string
  ; port : int
  ; db : string
  }

let parse_uri s =
  let uri = Uri.of_string s in
  let host = Uri.host_with_default uri in
  let user = Uri.user uri |> Option.value ~default:"postgres" in
  let pass = Uri.password uri |> Option.value ~default:"postgres" in
  let port = Uri.port uri |> Option.value ~default:5432 in
  let db_result =
    match Uri.path uri with
    | "/" ->
      Error (Omigrate_error.bad_uri s)
    | path ->
      if Filename.dirname path <> "/" then
        Error (Omigrate_error.bad_uri s)
      else
        Ok (Filename.basename path)
  in
  Result.map (fun db -> { host; user; pass; port; db }) db_result