1 module uim.json.classes.value; 2 3 import std.stdio; 4 import std.traits; 5 import uim.json; 6 7 class DJSNValue { 8 /++ 9 + JSN values can be: 10 A number (integer or floating point) 11 A string (in double quotes) 12 A Boolean (true or false) 13 An array (in square brackets) 14 An object (in curly braces) 15 null 16 +/ 17 18 @property auto keys() { return null; } 19 20 @property size_t length() { return 0; } 21 O opIndexAssign(this O, T)(T value, string name) if ((isNarrowString!T) && (isArray!T)) { return cast(O)this; } 22 O opIndexAssign(this O, T)(T value, string name) if ((!isNarrowString!T) && (!isArray!T)) { return cast(O)this; } 23 O opIndexAssign(this O, T)(T values, string name) if ((!isNarrowString!T) && (isArray!T)) { return cast(O)this; } 24 25 O opIndexAssign(this O, T)(T value, size_t index) if ((isNarrowString!T) && (isArray!T)) { return cast(O)this; } 26 O opIndexAssign(this O, T)(T value, size_t index) if ((!isNarrowString!T) && (!isArray!T)) { return cast(O)this; } 27 O opIndexAssign(this O, T)(T values, size_t index) if ((!isNarrowString!T) && (isArray!T)) { return cast(O)this; } 28 29 DJSNValue opIndex(size_t index) { return null; } 30 DJSNValue opIndex(string name) { return null; } 31 32 bool exists(size_t index) { return (this[index] ? true : false); } 33 bool exists(string name) { return (this[name] ? true : false); } 34 bool pathExists(string[] names...) { 35 if (names.length == 0) return false; 36 if (auto first = this[names[0]]) { 37 if (names.length > 1) return first.pathExists(names[1..$]); 38 return true; 39 } 40 return false; 41 } 42 DJSNValue pathValue(string[] names...) { 43 if (names.length == 0) return null; 44 if (auto first = this[names[0]]) { 45 if (names.length > 1) return first.pathValue(names[1..$]); 46 return first; 47 } 48 return null; 49 } 50 51 bool opEquals(string txt) { return (toString == txt); } 52 53 DJSNValue dup() { return null; } 54 override string toString() { 55 return ""; 56 } 57 } 58 auto JSNValue() { return JSNNull; } 59 60 auto JSNValue(DJSNValue value) { return value/*.dup*/; } 61 auto JSNValue(string value) { return JSNString(value); } 62 auto JSNValue(int value) { return JSNNumber(value); } 63 auto JSNValue(double value) { return JSNNumber(value); } 64 auto JSNValue(bool value) { return JSNBoolean(value); } 65 //auto JSNValue(DJSNArray value) { return JSNArray(value); } 66 auto JSNValue(DJSNObject value) { return JSNObject(value); } 67 /* 68 auto JSNValue(DJSNValue[] values) { return JSNArray(values)/ *.dup* /; } 69 auto JSNValue(string[] values) { return JSNArray(values); } 70 auto JSNValue(int[] values) { return JSNArray(values); } 71 auto JSNValue(double[] values) { return JSNArray(values); } 72 auto JSNValue(bool[] values) { return JSNArray(values); } 73 */