private void ParseXsdPopulator(ProjectModel model, ProjectLexer lexer) { var populator = new XsdProjectModelPopulator { Type = ProjectModelPopulatorType.Xsd }; model.Populators.Add(populator); lexer.Consume(TokenKind.LeftCurly); while (lexer.Token.Kind == TokenKind.Keyword) { var keyword = lexer.Consume(TokenKind.Keyword); switch (keyword) { case "path": populator.Path = ConsumeFile(lexer); OptionallyConsume(lexer, TokenKind.Semicolon); break; default: throw new ParserException($"Unexpected populator keyword: {keyword}.", lexer.Token); } } lexer.Consume(TokenKind.RightCurly); }
private IModelMerger CreateXsdLoader(XsdProjectModelPopulator modelPopulator, ProjectModel projectModel, AppSettings settings) { // Create the loader var loader = serviceProvider.GetRequiredService <IXsdLoader>(); // TODO - verify the path exists, and if not, throw an exception loader.Path = modelPopulator.Path; // TODO - make debugging an optional flag, either on the command-line or perhaps in the project file loader.DebugDumpPath = Path.Combine(settings.TempDir, $"{projectModel.Id}-xsdLoader.json"); // Create the XSD-to-model translator var xsdToModel = XsdToModel(loader, modelPopulator.Path, projectModel); xsdToModel.ShortName = "xsd"; // Clean things up a bit var cleaner = Clean(xsdToModel); // Wrap it all up in a merger return(Merge(cleaner)); }