/// Serialization of Items (RFC 9651 ยง4.1.3) and the public `serialize_item`
/// entry point.

///|
/// Serializes an Item into `buf`.
pub fn serialize_item_impl(
  buf : @buffer.Buffer,
  item : Item,
) -> Result[Unit, SfError] {
  match serialize_bare_item(buf, item.bare) {
    Err(e) => return Err(e)
    Ok(_) => ()
  }
  match serialize_parameters(buf, item.parameters) {
    Err(e) => return Err(e)
    Ok(_) => ()
  }
  Ok(())
}

///|
/// Serializes an Item to its ASCII wire form.
pub fn serialize_item(value : Item) -> Result[String, SfError] {
  let buf = @buffer.Buffer(size_hint=32)
  match serialize_item_impl(buf, value) {
    Err(e) => Err(e)
    Ok(_) => Ok(bytes_to_ascii(buf.to_bytes()))
  }
}