///|
/// 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()
}