diff options
Diffstat (limited to 'src/Conf.cpp')
-rw-r--r-- | src/Conf.cpp | 50 |
1 files changed, 50 insertions, 0 deletions
diff --git a/src/Conf.cpp b/src/Conf.cpp index 6383c30..dc1bbd0 100644 --- a/src/Conf.cpp +++ b/src/Conf.cpp @@ -331,4 +331,54 @@ namespace sibs return Parser::parse(code, callback); } + + void SibsConfig::processObject(StringView name) + { + currentObject = name; + printf("Process object: %.*s\n", name.size, name.data); + } + + void SibsConfig::processField(StringView name, const ConfigValue &value) + { + printf("Process field: %.*s, value: ", name.size, name.data); + if(value.isSingle()) + { + printf("\"%.*s\"", value.asSingle().size, value.asSingle().data); + } + else + { + printf("["); + int i = 0; + for(auto listElement : value.asList()) + { + if(i > 0) + printf(", "); + printf("\"%.*s\"", listElement.size, listElement.data); + ++i; + } + printf("]"); + } + printf("\n"); + + if(currentObject.equals("package") && name.equals("name")) + { + if(value.isSingle()) + packageName = string(value.asSingle().data, value.asSingle().size); + else + throw ParserException("Expected package.name to be a single value, was a list"); + } + else if(currentObject.equals("dependencies")) + { + if(value.isSingle()) + { + // TODO: Validate version is number in correct format + Dependency dependency; + dependency.name = string(name.data, name.size); + dependency.version = string(value.asSingle().data, value.asSingle().size); + dependencies.emplace_back(dependency); + } + else + throw ParserException("Expected field under dependencies to be a single value, was a list"); + } + } }
\ No newline at end of file |