module uim.json.schema.document;

import uim.json;

class JsonSchema {
	this() {}

	mixin(TProperty!("string", "schema"));
	mixin(TProperty!("string", "id"));
	mixin(TProperty!("string", "title"));
	mixin(TProperty!("PrimitiveTypes", "type"));
	mixin(TProperty!("string", "description"));
	mixin(TProperty!("string[]", "required"));
	mixin(TProperty!("JsonProperties", "properties"));

	override string toString() {
		string[] results;

		if (schema) results ~= `"$schema": "%s"`.format(schema);
		if (id) results ~= `"id": "%s"`.format(id);
		if (title) results ~= `"title": "%s"`.format(title);
		if (type) results ~= `"type": "%s"`.format(cast(string)type);
		if (description) results ~= `"description": "%s"`.format(description);
		if (required) results ~= `"required": "%s"`.format(required);
		if (properties) results ~= `"properties": %s`.format(properties);
		return "{ %s }".format(results.join(",\n"));
	}
}
auto JSNSCHEMA() { return new JsonSchema; }

unittest {
	writeln(JSNSCHEMA
		.schema("http://json-schema.org/draft-04/schema#")
		.title("Person")
		.type(PrimitiveTypes.OBJECT)
		.description("A representation of a person")
		.required(["familyName", "givenName"])
		);
}