///|
fn parse_ascii_int(text : StringView) -> Result[Int, String] {
  let len = text.length()
  if len == 0 {
    return Err("empty input")
  }
  let minus = (45).to_uint16()
  let plus = (43).to_uint16()
  let zero = (48).to_uint16()
  let nine = (57).to_uint16()
  let mut index = 0
  let mut sign = 1
  if text[0] == minus {
    sign = -1
    index = 1
  } else if text[0] == plus {
    index = 1
  }
  if index == len {
    return Err("missing digits")
  }
  let mut value = 0
  while index < len {
    let code = text[index]
    if code < zero || code > nine {
      return Err("invalid digit")
    }
    value = value * 10 + code.to_int() - 48
    index = index + 1
  }
  Ok(value * sign)
}