module uim.json.classes.number;

import uim.json;

class DJSNNumber : DJSNValue {
private:
	double _value = 0;
public:
	this() { }
	this(double value) { this.value = value; }
	this(string value) { this.value = value; }
	this(DJSNNumber value) { this.value = value; }
	alias value this;

	@property override size_t length() { return 1; }

	@property void value(int newValue) { _value = newValue; }
	@property void value(double newValue) { _value = newValue; }
	@property void value(string newValue) { import std.conv; value = to!double(newValue); }
	@property void value(DJSNNumber newValue) { value = newValue.value; }
	@property void value(DJSNValue newValue) { value = newValue.toString; }

	@property double value() { return _value; }

	@property double get() { return _value; }


	override DJSNValue dup() { return JSNNumber(_value); }

	override string toString() {
		import std.conv;

		return to!string(_value);
	}
}
auto JSNNumber() { return new DJSNNumber(); }
auto JSNNumber(T)(T value) { return new DJSNNumber(value); }