parseModeString

Parse a mode string into individual mode changes.

  1. auto parseModeString(T input, ModeType[char] channelModeTypes)
  2. auto parseModeString(string input, ModeType[char] channelModeTypes)
    parseModeString

Examples

1 import std.algorithm : canFind, filter, map;
2 import std.range : empty;
3 {
4 	const testParsed = parseModeString("+s", null);
5 	assert(testParsed.filter!(x => x.change == Change.set).map!(x => x.mode).canFind(Mode(ModeType.d, 's')));
6 	assert(testParsed.filter!(x => x.change == Change.unset).empty);
7 }
8 {
9 	const testParsed = parseModeString("-s", null);
10 	assert(testParsed.filter!(x => x.change == Change.set).empty);
11 	assert(testParsed.filter!(x => x.change == Change.unset).map!(x => x.mode).canFind(Mode(ModeType.d, 's')));
12 }
13 {
14 	const testParsed = parseModeString("+s-n", null);
15 	assert(testParsed.filter!(x => x.change == Change.set).map!(x => x.mode).canFind(Mode(ModeType.d, 's')));
16 	assert(testParsed.filter!(x => x.change == Change.unset).map!(x => x.mode).canFind(Mode(ModeType.d, 'n')));
17 }
18 {
19 	const testParsed = parseModeString("-s+n", null);
20 	assert(testParsed.filter!(x => x.change == Change.set).map!(x => x.mode).canFind(Mode(ModeType.d, 'n')));
21 	assert(testParsed.filter!(x => x.change == Change.unset).map!(x => x.mode).canFind(Mode(ModeType.d, 's')));
22 }
23 {
24 	const testParsed = parseModeString("+kp secret", ['k': ModeType.b]);
25 	assert(testParsed.filter!(x => x.change == Change.set).map!(x => x.mode).canFind(Mode(ModeType.d, 'p')));
26 	assert(testParsed.filter!(x => x.change == Change.set).map!(x => x.mode).canFind(Mode(ModeType.b, 'k', Nullable!string("secret"))));
27 }
28 {
29 	const testParsed = parseModeString("+kp secret", null);
30 	assert(testParsed.filter!(x => x.change == Change.set).map!(x => x.mode).canFind(Mode(ModeType.d, 'p')));
31 	assert(testParsed.filter!(x => x.change == Change.set).map!(x => x.mode).canFind(Mode(ModeType.d, 'k')));
32 }
33 {
34 	const testParsed = parseModeString("-s+nk secret", ['k': ModeType.b]);
35 	assert(testParsed.filter!(x => x.change == Change.set).map!(x => x.mode).canFind(Mode(ModeType.d, 'n')));
36 	assert(testParsed.filter!(x => x.change == Change.set).map!(x => x.mode).canFind(Mode(ModeType.b, 'k', Nullable!string("secret"))));
37 	assert(testParsed.filter!(x => x.change == Change.unset).map!(x => x.mode).canFind(Mode(ModeType.d, 's')));
38 }
39 {
40 	const testParsed = parseModeString("-sk+nl secret 4", ['k': ModeType.b, 'l': ModeType.c]);
41 	assert(testParsed.filter!(x => x.change == Change.set).map!(x => x.mode).canFind(Mode(ModeType.d, 'n')));
42 	assert(testParsed.filter!(x => x.change == Change.set).map!(x => x.mode).canFind(Mode(ModeType.b, 'l', Nullable!string("4"))));
43 	assert(testParsed.filter!(x => x.change == Change.unset).map!(x => x.mode).canFind(Mode(ModeType.b, 'k', Nullable!string("secret"))));
44 	assert(testParsed.filter!(x => x.change == Change.unset).map!(x => x.mode).canFind(Mode(ModeType.d, 's')));
45 }
46 {
47 	const testParsed = parseModeString("-s+nl 3333", ['l': ModeType.c]);
48 	assert(testParsed.filter!(x => x.change == Change.set).map!(x => x.mode).canFind(Mode(ModeType.d, 'n')));
49 	assert(testParsed.filter!(x => x.change == Change.set).map!(x => x.mode).canFind(Mode(ModeType.c, 'l', Nullable!string("3333"))));
50 	assert(testParsed.filter!(x => x.change == Change.unset).map!(x => x.mode).canFind(Mode(ModeType.d, 's')));
51 }
52 {
53 	const testParsed = parseModeString("+s-nl", ['l': ModeType.c]);
54 	assert(testParsed.filter!(x => x.change == Change.unset).map!(x => x.mode).canFind(Mode(ModeType.d, 'n')));
55 	assert(testParsed.filter!(x => x.change == Change.unset).map!(x => x.mode).canFind(Mode(ModeType.c, 'l')));
56 	assert(testParsed.filter!(x => x.change == Change.set).map!(x => x.mode).canFind(Mode(ModeType.d, 's')));
57 }
58 {
59 	const testParsed = parseModeString("+kp", ['k': ModeType.b]);
60 	assert(testParsed.empty);
61 }
62 {
63 	const testParsed = parseModeString("-kp", ['k': ModeType.b]);
64 	assert(testParsed.empty);
65 }

Meta