///|
fn bindings_from_yaml(
  values : Array[@value.Value],
) -> Bindings raise @partiql_yaml.YamlError {
  match values {
    [Tuple(t)] => Bindings::of_tuple(t)
    _ =>
      raise @partiql_yaml.YamlError::YamlError(
        kind=Bindings,
        location=None,
        message="bindings need exactly one YAML mapping document",
      )
  }
}

///|
/// Decode one YAML mapping into globals, preserving exact finite numbers.
pub fn Bindings::from_yaml_text(
  source : StringView,
) -> Bindings raise @partiql_yaml.YamlError {
  bindings_from_yaml(@partiql_yaml.read_text(source))
}

///|
/// Decode one UTF-8 YAML mapping into globals.
pub fn Bindings::from_yaml_bytes(
  source : BytesView,
) -> Bindings raise @partiql_yaml.YamlError {
  bindings_from_yaml(@partiql_yaml.read_bytes(source))
}