module uim.json.convert;

import uim.json;

/**
 * toJson - Converts string arrays to Vibe.d Json
 */
Json toJson(T)(T[] props) if ((isBoolean!T) || (isIntegral!T) || (isFloatingPoint!T) || (isSomeString!T)) {
	Json result = Json.emptyArray;
	foreach(prop; props) result ~= prop;
	return result;
}
unittest {
	assert([1, 2, 3].toJson.toString == `[1,2,3]`);
	assert(["1", "2", "3"].toJson.toString == `["1","2","3"]`);
}

Json toJson(T)(T[] props) if ((!isSomeString!T) && ((isArray!T) || (isAssociativeArray!T))) {
	Json result = Json.emptyArray;
	foreach(prop; props) result ~= prop.toJson;
	return result;
}
unittest {
	assert([1, 2, 3].toJson.toString == `[1,2,3]`);
	assert(["1", "2", "3"].toJson.toString == `["1","2","3"]`);
}

/**
 * toJson - Converts string associative arrays to Vibe.d Json
 */
Json toJson(T)(T[string] props) if ((isBoolean!T) || (isIntegral!T) || (isFloatingPoint!T) || (isSomeString!T)) {
	Json result = Json.emptyObject;
	foreach(k, v; props) {
		result[k] = v;
	}
	return result;
}
unittest {
	assert(["a":1].toJson.toString == `{"a":1}`);
	assert(["a":"x"].toJson.toString == `{"a":"x"}`);
}

Json toJson(T)(T[string] props) if ((!isSomeString!T) && ((isArray!T) || (isAssociativeArray!T))) {
	Json result = Json.emptyObject;
	foreach(k, v; props) {
		result[k] = v.toJson;
	}
	return result;
}
unittest {
	assert(["a":1].toJson.toString == `{"a":1}`);
	assert(["a":"x"].toJson.toString == `{"a":"x"}`);
}