///|
/// A MIME multipart container rendered on the wire. `children` are the fully
/// rendered wire texts of the child parts, wrapped between `--boundary`
/// delimiter lines (RFC 2046 section 5.1).
///
/// Layout:
/// ```
/// --boundary\r\n
/// 
/// --boundary\r\n
/// 
/// --boundary--\r\n
/// ```
pub fn assemble_multipart(
  children : Array[String],
  boundary : String,
) -> String raise MailFailure {
  guard is_valid_boundary(boundary) else {
    raise MailFailure::of(Mime, MM_MIME_003, "invalid boundary: \{boundary}")
  }
  let buf = Buffer::Buffer()
  for i = 0; i < children.length(); i = i + 1 {
    buf.write_string_utf16le("--")
    buf.write_string_utf16le(boundary)
    buf.write_string_utf16le("\r\n")
    buf.write_string_utf16le(children[i])
    if !children[i].has_suffix("\r\n") {
      buf.write_string_utf16le("\r\n")
    }
  }
  buf.write_string_utf16le("--")
  buf.write_string_utf16le(boundary)
  buf.write_string_utf16le("--\r\n")
  buf.to_string()
}