internal static MemoryFileSystem GenerateCodeInto(this string testName, MemoryFileSystem fileSystem, Settings settings) { // copy the whole input directory into the memoryfilesystem. fileSystem.CopyFolder("Resource", testName, ""); // find the appropriately named .yaml or .json file for the swagger. foreach (var ext in new[] { ".yaml", ".json", ".md" }) { var name = testName + ext; if (fileSystem.FileExists(name)) { settings.Input = name; } } if (string.IsNullOrWhiteSpace(settings.Input)) { throw new Exception($"Can't find swagger file ${testName} [.yaml] [.json] [.md]"); } var plugin = ExtensionsLoader.GetPlugin(); var modeler = ExtensionsLoader.GetModeler(); var codeModel = modeler.Build(); // After swagger Parser codeModel = AutoRestController.RunExtensions(Trigger.AfterModelCreation, codeModel); // After swagger Parser codeModel = AutoRestController.RunExtensions(Trigger.BeforeLoadingLanguageSpecificModel, codeModel); using (plugin.Activate()) { // load model into language-specific code model codeModel = plugin.Serializer.Load(codeModel); // we've loaded the model, run the extensions for after it's loaded codeModel = AutoRestController.RunExtensions(Trigger.AfterLoadingLanguageSpecificModel, codeModel); // apply language-specific tranformation (more than just language-specific types) // used to be called "NormalizeClientModel" . codeModel = plugin.Transformer.TransformCodeModel(codeModel); // next set of extensions codeModel = AutoRestController.RunExtensions(Trigger.AfterLanguageSpecificTransform, codeModel); // next set of extensions codeModel = AutoRestController.RunExtensions(Trigger.BeforeGeneratingCode, codeModel); // Generate code from CodeModel. plugin.CodeGenerator.Generate(codeModel).GetAwaiter().GetResult(); } return(fileSystem); }
internal static void CopyFolder(this MemoryFileSystem fileSystem, string basePath, string source, string destination) { fileSystem.CreateDirectory(destination); // Copy dirs recursively foreach (var child in Directory.EnumerateDirectories(Path.Combine(Core.Utilities.Extensions.CodeBaseDirectory(typeof(TestExtensions)), basePath, source)).Select(Path.GetFileName)) { fileSystem.CopyFolder(basePath, Path.Combine(source, child), Path.Combine(destination, child)); } // Copy files foreach (var childFile in Directory.EnumerateFiles(Path.Combine(Core.Utilities.Extensions.CodeBaseDirectory(typeof(TestExtensions)), basePath, source)).Select(Path.GetFileName)) { fileSystem.CopyFile(Path.Combine(Core.Utilities.Extensions.CodeBaseDirectory(typeof(TestExtensions)), basePath, source, childFile), Path.Combine(destination, childFile)); } }
internal static MemoryFileSystem GenerateCodeInto(this string testName, MemoryFileSystem inputFileSystem, Settings settings, IAnyPlugin plugin = null) { plugin = plugin ?? new PluginCs(); Settings.Instance.FileSystemInput = inputFileSystem; // copy the whole input directory into the memoryfilesystem. inputFileSystem.CopyFolder("Resource", testName, ""); // find the appropriately named .yaml or .json file for the swagger. foreach (var ext in new[] { ".yaml", ".json", ".md" }) { var name = testName + ext; if (inputFileSystem.FileExists(name)) { settings.Input = name; } } if (string.IsNullOrWhiteSpace(settings.Input)) { throw new Exception($"Can't find swagger file ${testName} [.yaml] [.json] [.md]"); } var modeler = new SwaggerModeler(Settings.Instance); var swagger = SwaggerParser.Parse(inputFileSystem.ReadAllText(Settings.Instance.Input)); var codeModel = modeler.Build(swagger); using (plugin.Activate()) { // load model into language-specific code model codeModel = plugin.Serializer.Load(codeModel); // apply language-specific tranformation (more than just language-specific types) // used to be called "NormalizeClientModel" . codeModel = plugin.Transformer.TransformCodeModel(codeModel); // Generate code from CodeModel. plugin.CodeGenerator.Generate(codeModel).GetAwaiter().GetResult(); return(settings.FileSystemOutput); } }