///|
pub fn value_kind_name(value : JsonValue) -> String {
  value_kind(value)
}

///|
pub fn is_container(value : JsonValue) -> Bool {
  match value {
    Array(_) | Object(_) => true
    _ => false
  }
}

///|
pub fn child_count(value : JsonValue) -> Int {
  match value {
    Array(values) => values.length()
    Object(entries) => entries.length()
    _ => 0
  }
}

///|
pub fn canonical_size(value : JsonValue) -> Result[Int, CanonicalError] {
  canonical_byte_length(value)
}

///|
pub fn canonicalize_many(
  inputs : Array[String],
) -> Result[Array[String], String] {
  let outputs : Array[String] = []
  for input in inputs {
    match canonicalize_json(input) {
      Ok(output) => outputs.push(output)
      Err(error) => return Err(error)
    }
  }
  Ok(outputs)
}

///|
pub fn canonicalize_many_text(inputs : Array[String]) -> String {
  match canonicalize_many(inputs) {
    Ok(outputs) => {
      let mut output = ""
      for item in outputs {
        if output != "" {
          output = output + "\n"
        }
        output = output + item
      }
      output
    }
    Err(error) => "error: " + error
  }
}