parseNumeric

Parser for RPL_WHOISIDLE

Format is 317 <client> <nick> <idle time in seconds> :seconds idle or 317 <client> <nick> <idle time in seconds> <time connected> :seconds idle, signon time

Examples

import core.time : seconds;
import std.datetime : DateTime, SysTime, UTC;
import std.range : only, takeNone;
import virc.common : User;
static immutable testTime = SysTime(DateTime(2017, 07, 14, 02, 40, 00), UTC());
{
	immutable reply = parseNumeric!(Numeric.RPL_WHOISIDLE)(only("someone", "whoisuser", "1500", "1500000000", "seconds idle, signon time"));
	assert(reply.user == User("whoisuser"));
	assert(reply.idleTime == 1500.seconds);
	assert(reply.connectedTime.get == testTime);
}
{
	immutable reply = parseNumeric!(Numeric.RPL_WHOISIDLE)(only("someone", "whoisuser", "1500", "seconds idle"));
	assert(reply.user == User("whoisuser"));
	assert(reply.idleTime == 1500.seconds);
	assert(reply.connectedTime.isNull);
}
{
	immutable reply = parseNumeric!(Numeric.RPL_WHOISIDLE)(only("someone", "whoisuser", "1500"));
	assert(reply.isNull);
}
{
	immutable reply = parseNumeric!(Numeric.RPL_WHOISIDLE)(only("someone", "whoisuser"));
	assert(reply.isNull);
}
{
	immutable reply = parseNumeric!(Numeric.RPL_WHOISIDLE)(only("someone"));
	assert(reply.isNull);
}
{
	immutable reply = parseNumeric!(Numeric.RPL_WHOISIDLE)(takeNone(only("")));
	assert(reply.isNull);
}

Meta