Source file region.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
open Base

module Env = struct
  type 'a t = ('a, Awskit.Error.t) Result.t

  let getenv_opt name = Stdlib.Sys.getenv_opt name

  let optional name =
    match getenv_opt name with
    | None -> Ok None
    | Some value when String.is_empty value ->
        Error (Awskit.Error.validation ~field:name (Fmt.str "%s is empty" name))
    | Some value -> Ok (Some value)
end

let from_env () =
  match Env.optional "AWS_REGION" with
  | Error _ as error -> error
  | Ok (Some region) -> Awskit.Region.of_string region
  | Ok None -> (
      match Env.optional "AWS_DEFAULT_REGION" with
      | Error _ as error -> error
      | Ok (Some region) -> Awskit.Region.of_string region
      | Ok None ->
          Error
            (Awskit.Error.validation ~field:"region"
               "AWS region not set; configure AWS_REGION or AWS_DEFAULT_REGION")
      )