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); }
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