1 module app; 2 3 import std.algorithm : canFind; 4 import std.json : JSONValue; 5 import std.stdio : writeln; 6 7 import myip; 8 9 void main(string[] args) { 10 11 bool public_ = args.canFind("--public"); 12 bool private_ = args.canFind("--private"); 13 bool v4 = args.canFind("--4"); 14 bool v6 = args.canFind("--6"); 15 16 void addImpl(ref JSONValue[string] json, string[] keys, JSONValue value) { 17 if(keys.length == 1) json[keys[0]] = value; 18 else { 19 if(keys[0] !in json) json[keys[0]] = (JSONValue[string]).init; 20 addImpl(json[keys[0]].object, keys[1..$], value); 21 } 22 } 23 24 JSONValue[string] json; 25 26 void add(T)(T value, string[] keys...) { 27 addImpl(json, keys, JSONValue(value)); 28 } 29 30 if(private_ || !public_) { 31 32 if(v4 || !v6) add(privateAddresses4(), "private", "v4"); 33 if(v6 || !v4) add(privateAddresses6(!args.canFind("--interface")), "private", "v6"); 34 35 } 36 37 if(public_ || !private_) { 38 39 if(args.canFind("--all")) { 40 41 foreach(member ; __traits(allMembers, Service)) { 42 mixin("alias service = Service." ~ member ~ ";"); 43 static if(is(typeof(service) == Service)) { 44 if(v4 || !v6) add(publicAddress4(service), "public", member, "v4"); 45 if(v6 || !v4) add(publicAddress6(service), "public", member, "v6"); 46 } 47 } 48 49 } else { 50 51 if(v4 || !v6) add(publicAddress4(), "public", "v4"); 52 if(v6 || !v4) add(publicAddress6(), "public", "v6"); 53 54 } 55 56 } 57 58 if(args.canFind("--pretty")) writeln(JSONValue(json).toPrettyString()); 59 else writeln(JSONValue(json)); 60 61 }