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 */