mirror of
https://github.com/mbierlee/mirage-config.git
synced 2024-11-15 04:44:01 +01:00
Add json string parsing
This commit is contained in:
parent
fcbc372923
commit
a1a99d1dee
|
@ -9,7 +9,7 @@
|
||||||
|
|
||||||
module mirage.json;
|
module mirage.json;
|
||||||
|
|
||||||
import std.json : JSONValue, JSONType;
|
import std.json : JSONValue, JSONType, parseJSON;
|
||||||
import std.conv : to;
|
import std.conv : to;
|
||||||
|
|
||||||
import mirage.config : ConfigFactory, ConfigDictionary, ConfigNode, ValueNode, ObjectNode, ArrayNode, ConfigCreationException;
|
import mirage.config : ConfigFactory, ConfigDictionary, ConfigNode, ValueNode, ObjectNode, ArrayNode, ConfigCreationException;
|
||||||
|
@ -20,7 +20,7 @@ class JsonConfigFactory : ConfigFactory {
|
||||||
}
|
}
|
||||||
|
|
||||||
ConfigDictionary parseConfig(string contents) {
|
ConfigDictionary parseConfig(string contents) {
|
||||||
throw new Exception("not yet implemented");
|
return parseJson(parseJSON(contents));
|
||||||
}
|
}
|
||||||
|
|
||||||
ConfigDictionary parseJson(JSONValue json) {
|
ConfigDictionary parseJson(JSONValue json) {
|
||||||
|
@ -73,7 +73,8 @@ class JsonConfigFactory : ConfigFactory {
|
||||||
}
|
}
|
||||||
|
|
||||||
version (unittest) {
|
version (unittest) {
|
||||||
@("Parse JSON") unittest {
|
@("Parse JSON")
|
||||||
|
unittest {
|
||||||
JSONValue serverJson = ["hostname": "hosty.com", "port": "1234"];
|
JSONValue serverJson = ["hostname": "hosty.com", "port": "1234"];
|
||||||
JSONValue nullJson = ["isNull": null];
|
JSONValue nullJson = ["isNull": null];
|
||||||
JSONValue socketsJson = [
|
JSONValue socketsJson = [
|
||||||
|
@ -99,7 +100,8 @@ version (unittest) {
|
||||||
assert(config.get("decimalas[2]") == "6.7");
|
assert(config.get("decimalas[2]") == "6.7");
|
||||||
}
|
}
|
||||||
|
|
||||||
@("Parse JSON root values") unittest {
|
@("Parse JSON root values")
|
||||||
|
unittest {
|
||||||
auto loader = new JsonConfigFactory();
|
auto loader = new JsonConfigFactory();
|
||||||
|
|
||||||
assert(loader.parseJson(JSONValue("hi")).get(".") == "hi");
|
assert(loader.parseJson(JSONValue("hi")).get(".") == "hi");
|
||||||
|
@ -108,4 +110,24 @@ version (unittest) {
|
||||||
assert(loader.parseJson(JSONValue(1.8)).get(".") == "1.8");
|
assert(loader.parseJson(JSONValue(1.8)).get(".") == "1.8");
|
||||||
assert(loader.parseJson(JSONValue([1, 2, 3])).get("[2]") == "3");
|
assert(loader.parseJson(JSONValue([1, 2, 3])).get("[2]") == "3");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@("Parse JSON string")
|
||||||
|
unittest {
|
||||||
|
string json = "
|
||||||
|
{
|
||||||
|
\"name\": \"Groot\",
|
||||||
|
\"traits\": [\"groot\", \"tree\"],
|
||||||
|
\"age\": 8728,
|
||||||
|
\"taxNumber\": null
|
||||||
|
}
|
||||||
|
";
|
||||||
|
|
||||||
|
auto loader = new JsonConfigFactory();
|
||||||
|
auto config = loader.parseJson(json);
|
||||||
|
|
||||||
|
assert(config.get("name") == "Groot");
|
||||||
|
assert(config.get("traits[1]") == "tree");
|
||||||
|
assert(config.get("age") == "8728");
|
||||||
|
assert(config.get("taxNumber") == null);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
6
testfiles/groot.json
Normal file
6
testfiles/groot.json
Normal file
|
@ -0,0 +1,6 @@
|
||||||
|
{
|
||||||
|
"name": "Groot",
|
||||||
|
"traits": ["groot", "tree"],
|
||||||
|
"age": 8728,
|
||||||
|
"taxNumber": null
|
||||||
|
}
|
Loading…
Reference in a new issue