/home/i/wrk/d/bogoyaml/bogoyaml_static.d
module bogoyaml_static;
import bogoyaml;
template ToStatic(T) {}
template ToStatic(T : T[char[]]) {
T[char[]] conv(YamlHolder yaml) {
T[char[]] ret;
alias ToStatic!(T) NextToStatic;
foreach (char[] key; yaml.assoc.keys) {
T tmp = NextToStatic.conv(yaml.get(key));
ret[key] = tmp;
}
return ret;
}
}
template ToStatic(T : T[]) {
T[] conv(YamlHolder yaml) {
T[] ret;
alias ToStatic!(T) NextToStatic;
foreach (YamlHolder y; yaml.array()) {
T tmp = NextToStatic.conv(y);
ret ~= tmp;
}
return ret;
}
}
template ToStatic(T : char[]) {
char[] conv(YamlHolder yaml) {
return yaml.str();
}
}
template ToStatic(T : int) {
int conv(YamlHolder yaml) {
return yaml.integer();
}
}
template ToStatic(T : double) {
double conv(YamlHolder yaml) {
return yaml.decimal();
}
}
template FromStatic(T) {}
template FromStatic(T : T[char[]]) {
YamlHolder conv(T[char[]] assoc) {
YamlAssoc ret = new YamlAssoc();
YamlHolder[char[]] a = ret.assoc;
foreach (char[] key; assoc.keys) {
alias FromStatic!(T) NextFromStatic;
a[key] = NextFromStatic.conv(assoc[key]);
}
ret.assoc = a;
return ret;
}
}
template FromStatic(T : T[]) {
YamlHolder conv(T[] array) {
YamlArray ret = new YamlArray();
YamlHolder[] a = ret.array;
foreach (T val; array) {
alias FromStatic!(T) NextFromStatic;
a ~= NextFromStatic.conv(val);
}
ret.array = a;
return ret;
}
}
template FromStatic(T : char[]) {
YamlHolder conv(char[] str) {
return new YamlScalar(str);
}
}
template FromStatic(T : int) {
YamlHolder conv(int i) {
return new YamlScalar(i);
}
}
template FromStatic(T : double) {
YamlHolder conv(double d) {
return new YamlScalar(d);
}
}