void AppendString (FormatOptions options, bool allowAtom, MemoryStream builder, string value)
{
byte[] buf;
switch (GetStringType (value, allowAtom)) {
case ImapStringType.Literal:
var literal = Encoding.UTF8.GetBytes (value);
var plus = CanUseNonSynchronizedLiteral (literal.Length);
var length = literal.Length.ToString ();
buf = Encoding.ASCII.GetBytes (length);
builder.WriteByte ((byte) '{');
builder.Write (buf, 0, buf.Length);
if (plus)
builder.WriteByte ((byte) '+');
builder.WriteByte ((byte) '}');
builder.WriteByte ((byte) '\r');
builder.WriteByte ((byte) '\n');
if (plus) {
builder.Write (literal, 0, literal.Length);
} else {
parts.Add (new ImapCommandPart (builder.ToArray (), new ImapLiteral (options, literal)));
builder.SetLength (0);
}
break;
case ImapStringType.QString:
buf = Encoding.UTF8.GetBytes (MimeUtils.Quote (value));
builder.Write (buf, 0, buf.Length);
break;
case ImapStringType.Atom:
buf = Encoding.UTF8.GetBytes (value);
builder.Write (buf, 0, buf.Length);
break;
case ImapStringType.Nil:
builder.Write (Nil, 0, Nil.Length);
break;
}
}