///|
/// Render a `Double` using Prometheus text special-number tokens.
///
/// MoonBit's ordinary `to_string` is locale independent. The explicit cases
/// prevent target-specific spellings such as `Infinity`, and preserving `-0`
/// retains the IEEE-754 sign bit in a parser-accepted form.
fn format_number(value : Double) -> String {
  if value.is_nan() {
    "NaN"
  } else if value.is_pos_inf() {
    "+Inf"
  } else if value.is_neg_inf() {
    "-Inf"
  } else if value == 0.0 && value.reinterpret_as_int64() < 0L {
    "-0"
  } else {
    value.to_string()
  }
}

///|
/// Render an OpenMetrics 1.0 floating-point number.
///
/// OpenMetrics distinguishes integer counts from floating-point sample values.
/// A finite floating value must therefore contain either a decimal point or an
/// exponent: `1.0`, rather than Prometheus text's valid `1`. The same canonical
/// rendering is used for the histogram `le` label value.
fn format_openmetrics_number(value : Double) -> String {
  if value.is_nan() {
    "NaN"
  } else if value.is_pos_inf() {
    "+Inf"
  } else if value.is_neg_inf() {
    "-Inf"
  } else {
    let rendered = if value == 0.0 && value.reinterpret_as_int64() < 0L {
      "-0.0"
    } else {
      value.to_string()
    }
    if rendered.contains(".") ||
      rendered.contains("e") ||
      rendered.contains("E") {
      rendered
    } else {
      rendered + ".0"
    }
  }
}

///|
fn format_count(value : Int64) -> String {
  "\{value}"
}