parseTagString

Undocumented in source. Be warned that the author may not have intended to support it.
parseTagString
(
string input
)

Examples

//Example from http://ircv3.net/specs/core/message-tags-3.2.html
{
	immutable tags = parseTagString("");
	assert(tags.length == 0);
}
//ditto
{
	immutable tags = parseTagString("aaa=bbb;ccc;example.com/ddd=eee");
	assert(tags.length == 3);
	assert(tags["aaa"] == "bbb");
	assert(tags["ccc"] == "");
	assert(tags["example.com/ddd"] == "eee");
}
//escape test
{
	immutable tags = parseTagString(`whatevs=\\s`);
	assert(tags.length == 1);
	assert("whatevs" in tags);
	assert(tags["whatevs"] == `\s`);
}
//Example from http://ircv3.net/specs/extensions/batch-3.2.html
{
	immutable tags = parseTagString(`batch=yXNAbvnRHTRBv`);
	assert(tags.length == 1);
	assert("batch" in tags);
	assert(tags["batch"] == "yXNAbvnRHTRBv");
}
//Example from http://ircv3.net/specs/extensions/account-tag-3.2.html
{
	immutable tags = parseTagString(`account=hax0r`);
	assert(tags.length == 1);
	assert("account" in tags);
	assert(tags["account"] == "hax0r");
}
{
	immutable tags = parseTagString(`testk=test\`);
	assert("testk" in tags);
	assert(tags["testk"] == "test");
}
import std.datetime : DateTime, msecs, SysTime, UTC;
//Example from http://ircv3.net/specs/extensions/server-time-3.2.html
{
	auto tags = parseTagString("time=2011-10-19T16:40:51.620Z");
	assert(tags.length == 1);
	assert("time" in tags);
	assert(tags["time"] == "2011-10-19T16:40:51.620Z");
	immutable testTime = SysTime(DateTime(2011,10,19,16,40,51), 620.msecs, UTC());
	assert(parseTime(tags) == testTime);
}
//ditto
{
	immutable tags = parseTagString("time=2012-06-30T23:59:60.419Z");
	assert(tags.length == 1);
	assert("time" in tags);
	assert(tags["time"] == "2012-06-30T23:59:60.419Z");
	//leap seconds not currently representable
	//assert(parseTime(splitStr.tags) == SysTime(DateTime(2012,06,30,23,59,60), 419.msecs, UTC()));
}

Meta