public void RenderErrorClass(string className, string superClass) { var tmpl = new ExceptionTemplate() { ClassName = className, SuperClass = superClass }; File.WriteAllText(Path.Combine(GenerateRootDir, $"{className.ClassName()}.cs"), tmpl.TransformText()); }
/// <summary> /// Generates C# code for service client. /// </summary> /// <param name="cm"></param> /// <returns></returns> public override async Task Generate(CodeModel cm) { // get c# specific codeModel var codeModel = cm as CodeModelCs; if (codeModel == null) { throw new InvalidCastException("CodeModel is not a c# CodeModel"); } // Service client var serviceClientTemplate = new ServiceClientTemplate{ Model = codeModel }; await Write(serviceClientTemplate, $"{codeModel.Name}{ImplementationFileExtension}" ); // Service client interface var serviceClientInterfaceTemplate = new ServiceClientInterfaceTemplate { Model = codeModel }; await Write(serviceClientInterfaceTemplate, $"I{codeModel.Name}{ImplementationFileExtension}"); // operations foreach (MethodGroupCs methodGroup in codeModel.Operations) { if(!methodGroup.Name.IsNullOrEmpty()) { // Operation var operationsTemplate = new MethodGroupTemplate { Model = methodGroup }; await Write(operationsTemplate, $"{operationsTemplate.Model.TypeName}{ImplementationFileExtension}"); // Operation interface var operationsInterfaceTemplate = new MethodGroupInterfaceTemplate { Model = methodGroup }; await Write(operationsInterfaceTemplate, $"I{operationsInterfaceTemplate.Model.TypeName}{ImplementationFileExtension}"); } var operationExtensionsTemplate = new ExtensionsTemplate { Model = methodGroup }; await Write(operationExtensionsTemplate, $"{methodGroup.ExtensionTypeName}Extensions{ImplementationFileExtension}"); } // Models foreach (CompositeTypeCs model in codeModel.ModelTypes.Union(codeModel.HeaderTypes)) { var modelTemplate = new ModelTemplate{ Model = model }; await Write(modelTemplate, Path.Combine(Settings.Instance.ModelsName, $"{model.Name}{ImplementationFileExtension}")); } // Enums foreach (EnumTypeCs enumType in codeModel.EnumTypes) { var enumTemplate = new EnumTemplate { Model = enumType }; await Write(enumTemplate, Path.Combine(Settings.Instance.ModelsName, $"{enumTemplate.Model.Name}{ImplementationFileExtension}")); } // Exceptions foreach (CompositeTypeCs exceptionType in codeModel.ErrorTypes) { var exceptionTemplate = new ExceptionTemplate { Model = exceptionType, }; await Write(exceptionTemplate, Path.Combine(Settings.Instance.ModelsName, $"{exceptionTemplate.Model.ExceptionTypeDefinitionName}{ImplementationFileExtension}")); } }
static bool Prefix(Queue <Exception> ___sLastException) { Exception e = ___sLastException.Peek(); if (e != null) { ExceptionTemplate.RegisterException(e).Suppressed = ExceptionPanelExt.instance.m_chbSuppressThis.isChecked; } ExceptionPanelExt.instance.m_chbSuppressThis.isVisible = false; return(true); }
protected override async Task GenerateExceptions(IEnumerable <CompositeType> errorTypes) { foreach (CompositeTypeCs exceptionType in errorTypes) { if (exceptionType.Name == "CloudError") { continue; } var exceptionTemplate = new ExceptionTemplate { Model = exceptionType }; await Write(exceptionTemplate, $"{GeneratedSourcesBaseFolder}{FolderModels}/{exceptionTemplate.Model.ExceptionTypeDefinitionName}{ImplementationFileExtension}"); } }
static bool Prefix(ref string message, ref Exception exception, Queue <Exception> ___sLastException) { UIComponent uicomponent = UIView.library.Get("ExceptionPanel"); if (uicomponent != null && UIView.GetModalComponent() != uicomponent) { if (exception == null) { return(ModInfo.sb_SuppressAllExceptions.value ? false : true); } var template = ExceptionTemplate.RegisterException(exception); template.RaisedCount++; if (!template.Suppressed && !ModInfo.sb_SuppressAllExceptions.value) { ExceptionPanelExt.instance.m_chbSuppressThis.isChecked = false; message = message ?? ""; HealkitException hke = exception as HealkitException; if (hke != null) { message += exception.Message + "\n\n" + exception.InnerException.ToString().Replace('&', '+'); if (hke.m_supperessMsg != null) { ExceptionPanelExt.instance.m_chbSuppressThis.isVisible = true; ExceptionPanelExt.instance.m_chbSuppressThis.tooltip = hke.m_supperessMsg; } } else { ExceptionPanelExt.instance.m_chbSuppressThis.isVisible = false; message += exception.ToString().Replace('&', '+'); } exception = null; return(true); } else { if (___sLastException.Count > 0) { ___sLastException.Dequeue(); } } } return(false); }
/// <summary> /// Generates Azure Java code for service client. /// </summary> /// <param name="serviceClient"></param> /// <returns></returns> public override async Task Generate(CodeModel cm) { var packagePath = $"src/main/java/{cm.Namespace.ToLower().Replace('.', '/')}"; // get Azure Java specific codeModel var codeModel = cm as CodeModelJva; if (codeModel == null) { throw new InvalidCastException("CodeModel is not a Azure Java CodeModel"); } // Service client var serviceClientTemplate = new AzureServiceClientTemplate { Model = codeModel }; await Write(serviceClientTemplate, $"{packagePath}/implementation/{codeModel.Name.ToPascalCase()}Impl{ImplementationFileExtension}"); // Service client interface var serviceClientInterfaceTemplate = new AzureServiceClientInterfaceTemplate { Model = codeModel }; await Write(serviceClientInterfaceTemplate, $"{packagePath}/{cm.Name.ToPascalCase()}{ImplementationFileExtension}"); // operations foreach (MethodGroupJva methodGroup in codeModel.AllOperations) { // Operation var operationsTemplate = new AzureMethodGroupTemplate { Model = methodGroup }; await Write(operationsTemplate, $"{packagePath}/implementation/{methodGroup.TypeName.ToPascalCase()}Impl{ImplementationFileExtension}"); // Operation interface var operationsInterfaceTemplate = new AzureMethodGroupInterfaceTemplate { Model = methodGroup }; await Write(operationsInterfaceTemplate, $"{packagePath}/{methodGroup.TypeName.ToPascalCase()}{ImplementationFileExtension}"); } //Models foreach (CompositeTypeJva modelType in cm.ModelTypes.Concat(codeModel.HeaderTypes)) { if (modelType.Extensions.ContainsKey(AzureExtensions.ExternalExtension) && (bool)modelType.Extensions[AzureExtensions.ExternalExtension]) { continue; } if (modelType.IsResource) { continue; } var modelTemplate = new ModelTemplate { Model = modelType }; await Write(modelTemplate, $"{packagePath}/models/{modelType.Name.ToPascalCase()}{ImplementationFileExtension}"); } //Enums foreach (EnumTypeJva enumType in cm.EnumTypes) { var enumTemplate = new EnumTemplate { Model = enumType }; await Write(enumTemplate, $"{packagePath}/models/{enumTemplate.Model.Name.ToPascalCase()}{ImplementationFileExtension}"); } // Page class foreach (var pageClass in codeModel.pageClasses) { var pageTemplate = new PageTemplate { Model = new PageJva(pageClass.Value, pageClass.Key.Key, pageClass.Key.Value), }; await Write(pageTemplate, $"{packagePath}/models/{pageTemplate.Model.TypeDefinitionName.ToPascalCase()}{ImplementationFileExtension}"); } // Exceptions foreach (CompositeTypeJv exceptionType in codeModel.ErrorTypes) { if (exceptionType.Name == "CloudError") { continue; } var exceptionTemplate = new ExceptionTemplate { Model = exceptionType }; await Write(exceptionTemplate, $"{packagePath}/models/{exceptionTemplate.Model.ExceptionTypeDefinitionName}{ImplementationFileExtension}"); } // package-info.java await Write(new PackageInfoTemplate { Model = new PackageInfoTemplateModel(cm) }, $"{packagePath}/{_packageInfoFileName}"); await Write(new PackageInfoTemplate { Model = new PackageInfoTemplateModel(cm, "implementation") }, $"{packagePath}/implementation/{_packageInfoFileName}"); await Write(new PackageInfoTemplate { Model = new PackageInfoTemplateModel(cm, "models") }, $"{packagePath}/models/{_packageInfoFileName}"); if (true == AutoRest.Core.Settings.Instance.Host?.GetValue <bool?>("regenerate-manager").Result) { await Write(new AzurePomTemplate { Model = codeModel }, "pom.xml"); } }
/// <summary> /// Generates C# code for service client. /// </summary> /// <param name="serviceClient"></param> /// <returns></returns> public override async Task Generate(ServiceClient serviceClient) { // Service client var serviceClientTemplate = new ServiceClientTemplate { Model = new ServiceClientTemplateModel(serviceClient, InternalConstructors), }; await Write(serviceClientTemplate, serviceClient.Name + ".cs"); // Service client extensions var extensionsTemplate = new ExtensionsTemplate { Model = new ExtensionsTemplateModel(serviceClient, null), }; await Write(extensionsTemplate, serviceClient.Name + "Extensions.cs"); // Service client interface var serviceClientInterfaceTemplate = new ServiceClientInterfaceTemplate { Model = new ServiceClientTemplateModel(serviceClient, InternalConstructors), }; await Write(serviceClientInterfaceTemplate, "I" + serviceClient.Name + ".cs"); // Operations foreach (var group in serviceClient.MethodGroups) { // Operation var operationsTemplate = new MethodGroupTemplate { Model = new MethodGroupTemplateModel(serviceClient, group), }; await Write(operationsTemplate, operationsTemplate.Model.MethodGroupType + ".cs"); // Service client extensions var operationExtensionsTemplate = new ExtensionsTemplate { Model = new ExtensionsTemplateModel(serviceClient, group), }; await Write(operationExtensionsTemplate, group + "Extensions.cs"); // Operation interface var operationsInterfaceTemplate = new MethodGroupInterfaceTemplate { Model = new MethodGroupTemplateModel(serviceClient, group), }; await Write(operationsInterfaceTemplate, "I" + operationsInterfaceTemplate.Model.MethodGroupType + ".cs"); } // Models foreach (var model in serviceClient.ModelTypes.Concat(serviceClient.HeaderTypes)) { var modelTemplate = new ModelTemplate { Model = new ModelTemplateModel(model), }; await Write(modelTemplate, Path.Combine("Models", model.Name + ".cs")); } // Enums foreach (var enumType in serviceClient.EnumTypes) { var enumTemplate = new EnumTemplate { Model = new EnumTemplateModel(enumType), }; await Write(enumTemplate, Path.Combine("Models", enumTemplate.Model.TypeDefinitionName + ".cs")); } // Exception foreach (var exceptionType in serviceClient.ErrorTypes) { var exceptionTemplate = new ExceptionTemplate { Model = new ModelTemplateModel(exceptionType), }; await Write(exceptionTemplate, Path.Combine("Models", exceptionTemplate.Model.ExceptionTypeDefinitionName + ".cs")); } }
/// <summary> /// Generate Python client code for given ServiceClient. /// </summary> /// <param name="serviceClient"></param> /// <returns></returns> public override async Task Generate(CodeModel cm) { var codeModel = cm as CodeModelPy; if (codeModel == null) { throw new Exception("Code model is not a Python Code Model"); } // Service client var setupTemplate = new SetupTemplate { Model = codeModel }; await Write(setupTemplate, "setup.py"); var serviceClientInitTemplate = new ServiceClientInitTemplate { Model = codeModel }; await Write(serviceClientInitTemplate, Path.Combine(codeModel.PackageName, "__init__.py")); var serviceClientTemplate = new ServiceClientTemplate { Model = codeModel }; await Write(serviceClientTemplate, Path.Combine(codeModel.PackageName, codeModel.Name.ToPythonCase() + ".py")); var versionTemplate = new VersionTemplate { Model = codeModel }; await Write(versionTemplate, Path.Combine(codeModel.PackageName, "version.py")); var exceptionTemplate = new ExceptionTemplate { Model = codeModel }; await Write(exceptionTemplate, Path.Combine(codeModel.PackageName, "exceptions.py")); var credentialTemplate = new CredentialTemplate { Model = codeModel }; await Write(credentialTemplate, Path.Combine(codeModel.PackageName, "credentials.py")); //Models if (codeModel.ModelTypes.Any()) { var modelInitTemplate = new ModelInitTemplate { Model = codeModel }; await Write(modelInitTemplate, Path.Combine(codeModel.PackageName, "models", "__init__.py")); foreach (var modelType in codeModel.ModelTemplateModels) { var modelTemplate = new ModelTemplate { Model = modelType }; await Write(modelTemplate, Path.Combine(codeModel.PackageName, "models", ((string)modelType.Name).ToPythonCase() + ".py")); } } //MethodGroups if (codeModel.MethodGroupModels.Any()) { var methodGroupIndexTemplate = new MethodGroupInitTemplate { Model = codeModel }; await Write(methodGroupIndexTemplate, Path.Combine(codeModel.PackageName, "operations", "__init__.py")); foreach (var methodGroupModel in codeModel.MethodGroupModels) { var methodGroupTemplate = new MethodGroupTemplate { Model = methodGroupModel }; await Write(methodGroupTemplate, Path.Combine(codeModel.PackageName, "operations", ((string) methodGroupModel.TypeName).ToPythonCase() + ".py")); } } // Enums if (codeModel.EnumTypes.Any()) { var enumTemplate = new EnumTemplate { Model = codeModel.EnumTypes }; await Write(enumTemplate, Path.Combine(codeModel.PackageName, "models", codeModel.Name.ToPythonCase() + "_enums.py")); } }
/// <summary> /// Generates C# code for service client. /// </summary> /// <param name="codeModel"></param> /// <returns></returns> public override async Task Generate(CodeModel cm) { var codeModel = cm as CodeModelCsa; if (codeModel == null) { throw new InvalidCastException("CodeModel is not a Azure c# CodeModel"); } // Service client var serviceClientTemplate = new AutoRest.CSharp.Azure.JsonRpcClient.Templates.AzureServiceClientTemplate { Model = codeModel }; await Write(serviceClientTemplate, $"{codeModel.Name}{ImplementationFileExtension}"); // Service client interface var serviceClientInterfaceTemplate = new ServiceClientInterfaceTemplate { Model = codeModel }; await Write(serviceClientInterfaceTemplate, "I" + codeModel.Name + ImplementationFileExtension); // Operations foreach (MethodGroupCs group in codeModel.Operations) { if (!group.IsCodeModelMethodGroup) { // Operation var operationsTemplate = new AutoRest.CSharp.Azure.JsonRpcClient.Templates.AzureMethodGroupTemplate { Model = group }; await Write(operationsTemplate, operationsTemplate.Model.TypeName + ImplementationFileExtension); // Operation interface var operationsInterfaceTemplate = new MethodGroupInterfaceTemplate { Model = group }; await Write(operationsInterfaceTemplate, $"I{operationsInterfaceTemplate.Model.TypeName}{ImplementationFileExtension}"); } var operationExtensionsTemplate = new ExtensionsTemplate { Model = group }; await Write(operationExtensionsTemplate, $"{group.ExtensionTypeName}Extensions{ImplementationFileExtension}"); } // Models foreach (CompositeTypeCs model in codeModel.ModelTypes.Concat(codeModel.HeaderTypes)) { if (model.Extensions.ContainsKey(AzureExtensions.ExternalExtension) && (bool)model.Extensions[AzureExtensions.ExternalExtension]) { continue; } var modelTemplate = new ModelTemplate { Model = model }; await Write(modelTemplate, Path.Combine(Settings.Instance.ModelsName, $"{model.Name}{ImplementationFileExtension}")); } // Enums foreach (EnumTypeCs enumType in codeModel.EnumTypes) { var enumTemplate = new EnumTemplate { Model = enumType }; await Write(enumTemplate, Path.Combine(Settings.Instance.ModelsName, $"{enumTemplate.Model.Name}{ImplementationFileExtension}")); } // Page class foreach (var pageClass in codeModel.pageClasses) { var pageTemplate = new PageTemplate { Model = new Page(pageClass.Value, pageClass.Key.Key, pageClass.Key.Value) }; await Write(pageTemplate, Path.Combine(Settings.Instance.ModelsName, $"{pageTemplate.Model.TypeDefinitionName}{ImplementationFileExtension}")); } // Exceptions foreach (CompositeTypeCs exceptionType in codeModel.ErrorTypes) { if (exceptionType.Name == "CloudError") { continue; } var exceptionTemplate = new ExceptionTemplate { Model = exceptionType }; await Write(exceptionTemplate, Path.Combine(Settings.Instance.ModelsName, $"{exceptionTemplate.Model.ExceptionTypeDefinitionName}{ImplementationFileExtension}")); } // Xml Serialization if (codeModel.ShouldGenerateXmlSerialization) { var xmlSerializationTemplate = new XmlSerializationTemplate { Model = null }; await Write(xmlSerializationTemplate, Path.Combine(Settings.Instance.ModelsName, $"{XmlSerialization.XmlDeserializationClass}{ImplementationFileExtension}")); } }
/// <summary> /// Generates C# code for service client. /// </summary> /// <param name="serviceClient"></param> /// <returns></returns> public override async Task Generate(CodeModel cm) { var packagePath = $"src/main/java/{Settings.Instance.Namespace.ToLower().Replace('.', '/')}"; // get Azure Java specific codeModel var codeModel = cm as CodeModelJvaf; if (codeModel == null) { throw new InvalidCastException("CodeModel is not a Azure Java Fluent CodeModel"); } SegmentFluentMethodGroups innerMGroupToFluentMGroup = null; if (true == AutoRest.Core.Settings.Instance.Host?.GetValue <bool?>("generate-interface").Result) { var idParsingUtilsTemplate = new IdParsingUtilsTemplate { Model = codeModel }; await Write(idParsingUtilsTemplate, $"{packagePath}/implementation/IdParsingUtils{ImplementationFileExtension}"); innerMGroupToFluentMGroup = SegmentFluentMethodGroups.InnerMethodGroupToSegmentFluentMethodGroups(codeModel); #region Produce all method group interfaces // foreach (IFluentMethodGroup group in innerMGroupToFluentMGroup.Select(m => m.Value.PrunedMethodGroup)) { var methodGroupInterfaceTemplate = new FluentMethodGroupInterfaceTemplate { Model = new ClientFluentMethodGroupInterface(group) }; await Write(methodGroupInterfaceTemplate, $"{packagePath}/{group.JavaInterfaceName.ToPascalCase()}{ImplementationFileExtension}"); } // #endregion #region Produce all method group implementation // innerMGroupToFluentMGroup.Select(m => m.Value).ForEach(async list => { var prunedGroup = list.PrunedMethodGroup; if (prunedGroup.Type == MethodGroupType.GroupableTopLevel) { ClientFluentGroupableMethodGroupImpl groupImplModel = new ClientFluentGroupableMethodGroupImpl(prunedGroup); var groupImplTemplate = new GroupableMethodGroupImplTemplate { Model = groupImplModel }; await Write(groupImplTemplate, $"{packagePath}/implementation/{groupImplModel.JavaClassName.ToPascalCase()}{ImplementationFileExtension}"); } else if (prunedGroup.Type == MethodGroupType.NonGroupableTopLevel) { ClientFluentNonGroupableTopLevelMethodGroupImpl groupImplModel = new ClientFluentNonGroupableTopLevelMethodGroupImpl(prunedGroup); var groupImplTemplate = new NonGroupableTopLevelMethodGroupImplTemplate { Model = groupImplModel }; await Write(groupImplTemplate, $"{packagePath}/implementation/{groupImplModel.JavaClassName.ToPascalCase()}{ImplementationFileExtension}"); } else if (prunedGroup.Type == MethodGroupType.Nested) { ClientFluentNestedMethodGroupImpl groupImplModel = new ClientFluentNestedMethodGroupImpl(prunedGroup); var groupImplTemplate = new NestedMethodGroupImplTemplate { Model = groupImplModel }; await Write(groupImplTemplate, $"{packagePath}/implementation/{groupImplModel.JavaClassName.ToPascalCase()}{ImplementationFileExtension}"); } else if (prunedGroup.Type == MethodGroupType.ActionsOnly) { var groupImplModel = new ClientFluentActionsOnlyMethodGroupImpl(prunedGroup); var groupImplTemplate = new ActionsOnlyMethodGroupImplTemplate { Model = groupImplModel }; await Write(groupImplTemplate, $"{packagePath}/implementation/{groupImplModel.JavaClassName.ToPascalCase()}{ImplementationFileExtension}"); } }); // #endregion #region Produce readonly model interface & impl // foreach (ClientFluentReadOnlyModelInterface fluentModel in innerMGroupToFluentMGroup.ReadonlyFluentModels) { var modelInterfaceTemplate = new ReadOnlyModelInterfaceTemplate { Model = fluentModel }; await Write(modelInterfaceTemplate, $"{packagePath}/{fluentModel.JavaInterfaceName.ToPascalCase()}{ImplementationFileExtension}"); // var modelImplTemplate = new ReadOnlyModelImplTemplate { Model = fluentModel.Impl }; await Write(modelImplTemplate, $"{packagePath}/implementation/{fluentModel.Impl.JavaClassName.ToPascalCase()}{ImplementationFileExtension}"); // No specific method group for readonly models these models are shared between other type of method groups [Groupable, no-Groupable-top-level and nested] } #endregion #region Produce nested model interface & impl // foreach (ClientFluentNestedModelInterface fluentModel in innerMGroupToFluentMGroup.NestedFluentModels) { var modelInterfaceTemplate = new NestedModelInterfaceTemplate { Model = fluentModel }; await Write(modelInterfaceTemplate, $"{packagePath}/{fluentModel.JavaInterfaceName.ToPascalCase()}{ImplementationFileExtension}"); // var modelImplTemplate = new NestedModelImplTemplate { Model = fluentModel.Impl }; await Write(modelImplTemplate, $"{packagePath}/implementation/{fluentModel.Impl.JavaClassName.ToPascalCase()}{ImplementationFileExtension}"); } #endregion #region Produce groupable model interface & impl // foreach (ClientFluentGroupableModelInterface fluentModel in innerMGroupToFluentMGroup.GroupableFluentModels) { var modelInterfaceTemplate = new GroupableModelInterfaceTemplate { Model = fluentModel }; await Write(modelInterfaceTemplate, $"{packagePath}/{fluentModel.JavaInterfaceName.ToPascalCase()}{ImplementationFileExtension}"); var modelImplTemplate = new GroupableModelImplTemplate { Model = fluentModel.Impl }; await Write(modelImplTemplate, $"{packagePath}/implementation/{fluentModel.Impl.JavaClassName.ToPascalCase()}{ImplementationFileExtension}"); } #endregion #region Produce non-groupable top-level model interface & impl foreach (ClientFluentNonGroupableTopLevelModelInterface fluentModel in innerMGroupToFluentMGroup.NonGroupableTopLevelFluentModels) { var modelInterfaceTemplate = new NonGroupableTopLevelModelInterfaceTemplate { Model = fluentModel }; await Write(modelInterfaceTemplate, $"{packagePath}/{fluentModel.JavaInterfaceName.ToPascalCase()}{ImplementationFileExtension}"); var modelImplTemplate = new NonGroupableTopLevelModelImplTemplate { Model = fluentModel.Impl }; await Write(modelImplTemplate, $"{packagePath}/implementation/{fluentModel.Impl.JavaClassName.ToPascalCase()}{ImplementationFileExtension}"); } #endregion if (true == AutoRest.Core.Settings.Instance.Host?.GetValue <bool?>("generate-test").Result) { var packageTestPath = $"src/test/java/{Settings.Instance.Namespace.ToLower().Replace('.', '/')}"; var testModel = new TestModel(codeModel); await Write(new TestTemplate { Model = testModel }, $"{packageTestPath}/{testModel.ClassName}Test{ImplementationFileExtension}"); } } // Service client var serviceClientTemplate = new AzureServiceClientTemplate { Model = codeModel }; await Write(serviceClientTemplate, $"{packagePath}/implementation/{codeModel.Name.ToPascalCase()}Impl{ImplementationFileExtension}"); // operations foreach (MethodGroupJvaf methodGroup in codeModel.AllOperations) { // Operation var operationsTemplate = new AzureMethodGroupTemplate { Model = methodGroup }; await Write(operationsTemplate, $"{packagePath}/implementation/{methodGroup.TypeName.ToPascalCase()}Inner{ImplementationFileExtension}"); } //Models foreach (CompositeTypeJvaf modelType in cm.ModelTypes.Concat(codeModel.HeaderTypes)) { if (modelType.Extensions.ContainsKey(AzureExtensions.ExternalExtension) && (bool)modelType.Extensions[AzureExtensions.ExternalExtension]) { continue; } if (modelType.IsResource) { continue; } var modelTemplate = new ModelTemplate { Model = modelType }; await Write(modelTemplate, $"{packagePath}/{modelType.ModelsPackage.Trim('.')}/{modelType.Name.ToPascalCase()}{ImplementationFileExtension}"); } //Enums foreach (EnumTypeJvaf enumType in cm.EnumTypes) { var enumTemplate = new EnumTemplate { Model = enumType }; await Write(enumTemplate, $"{packagePath}/{enumType.ModelsPackage.Trim('.')}/{enumTemplate.Model.Name.ToPascalCase()}{ImplementationFileExtension}"); } // Page class foreach (var pageClass in codeModel.pageClasses) { var pageTemplate = new PageTemplate { Model = new PageJvaf(pageClass.Value, pageClass.Key.Key, pageClass.Key.Value), }; await Write(pageTemplate, $"{packagePath}/implementation/{pageTemplate.Model.TypeDefinitionName.ToPascalCase()}{ImplementationFileExtension}"); } // Exceptions foreach (CompositeTypeJv exceptionType in codeModel.ErrorTypes) { if (exceptionType.Name == "CloudError") { continue; } var exceptionTemplate = new ExceptionTemplate { Model = exceptionType }; await Write(exceptionTemplate, $"{packagePath}/{exceptionType.ModelsPackage.Trim('.')}/{exceptionTemplate.Model.ExceptionTypeDefinitionName}{ImplementationFileExtension}"); } // package-info.java await Write(new PackageInfoTemplate { Model = new PackageInfoTemplateModel(cm) }, $"{packagePath}/{_packageInfoFileName}"); await Write(new PackageInfoTemplate { Model = new PackageInfoTemplateModel(cm, "implementation") }, $"{packagePath}/implementation/{_packageInfoFileName}"); if (true == AutoRest.Core.Settings.Instance.Host?.GetValue <bool?>("regenerate-manager").Result) { ServiceManagerModel serviceManagerModel = new ServiceManagerModel(codeModel, innerMGroupToFluentMGroup); // Manager await Write( new AzureFluentServiceManagerTemplate { Model = serviceManagerModel }, $"{packagePath}/implementation/{serviceManagerModel.ManagerName}{ImplementationFileExtension}"); // POM await Write(new AzureFluentPomTemplate { Model = codeModel }, "pom.xml"); } }
/// <summary> /// Generates C# code for service client. /// </summary> /// <param name="serviceClient"></param> /// <returns></returns> public override async Task Generate(ServiceClient serviceClient) { // Service client var serviceClientTemplate = new AzureServiceClientTemplate { Model = new AzureServiceClientTemplateModel(serviceClient, InternalConstructors), }; await Write(serviceClientTemplate, serviceClient.Name + ".cs"); // Service client extensions if (serviceClient.Methods.Any(m => m.Group == null)) { var extensionsTemplate = new ExtensionsTemplate { Model = new AzureExtensionsTemplateModel(serviceClient, null, SyncMethods), }; await Write(extensionsTemplate, serviceClient.Name + "Extensions.cs"); } // Service client interface var serviceClientInterfaceTemplate = new ServiceClientInterfaceTemplate { Model = new AzureServiceClientTemplateModel(serviceClient, InternalConstructors), }; await Write(serviceClientInterfaceTemplate, "I" + serviceClient.Name + ".cs"); // Operations foreach (var group in serviceClient.MethodGroups) { // Operation var operationsTemplate = new AzureMethodGroupTemplate { Model = new AzureMethodGroupTemplateModel(serviceClient, group), }; await Write(operationsTemplate, operationsTemplate.Model.MethodGroupType + ".cs"); // Service client extensions var operationExtensionsTemplate = new ExtensionsTemplate { Model = new AzureExtensionsTemplateModel(serviceClient, group, SyncMethods), }; await Write(operationExtensionsTemplate, operationExtensionsTemplate.Model.ExtensionName + "Extensions.cs"); // Operation interface var operationsInterfaceTemplate = new MethodGroupInterfaceTemplate { Model = new AzureMethodGroupTemplateModel(serviceClient, group), }; await Write(operationsInterfaceTemplate, "I" + operationsInterfaceTemplate.Model.MethodGroupType + ".cs"); } // Models foreach (var model in serviceClient.ModelTypes.Concat(serviceClient.HeaderTypes)) { if (model.Extensions.ContainsKey(AzureExtensions.ExternalExtension) && (bool) model.Extensions[AzureExtensions.ExternalExtension]) { continue; } var modelTemplate = new ModelTemplate { Model = new AzureModelTemplateModel(model), }; await Write(modelTemplate, Path.Combine(Settings.ModelsName, model.Name + ".cs")); } // Enums foreach (var enumType in serviceClient.EnumTypes) { var enumTemplate = new EnumTemplate { Model = new EnumTemplateModel(enumType), }; await Write(enumTemplate, Path.Combine(Settings.ModelsName, enumTemplate.Model.TypeDefinitionName + ".cs")); } // Page class foreach (var pageClass in pageClasses) { var pageTemplate = new PageTemplate { Model = new PageTemplateModel(pageClass.Value, pageClass.Key.Key, pageClass.Key.Value), }; await Write(pageTemplate, Path.Combine(Settings.ModelsName, pageTemplate.Model.TypeDefinitionName + ".cs")); } // Exceptions foreach (var exceptionType in serviceClient.ErrorTypes) { if (exceptionType.Name == "CloudError") { continue; } var exceptionTemplate = new ExceptionTemplate { Model = new ModelTemplateModel(exceptionType), }; await Write(exceptionTemplate, Path.Combine(Settings.ModelsName, exceptionTemplate.Model.ExceptionTypeDefinitionName + ".cs")); } }
/// <summary> /// Generate Java client code for given ServiceClient. /// </summary> /// <param name="serviceClient"></param> /// <returns></returns> public override async Task Generate(ServiceClient serviceClient) { var serviceClientTemplateModel = new ServiceClientTemplateModel(serviceClient); // Service client var serviceClientTemplate = new ServiceClientTemplate { Model = serviceClientTemplateModel, }; await Write(serviceClientTemplate, serviceClient.Name.ToPascalCase() + "Impl.java"); var serviceClientInterfaceTemplate = new ServiceClientInterfaceTemplate { Model = serviceClientTemplateModel, }; await Write(serviceClientInterfaceTemplate, serviceClient.Name.ToPascalCase() + ".java"); //Models foreach (var modelType in serviceClient.ModelTypes.Concat(serviceClient.HeaderTypes)) { var modelTemplate = new ModelTemplate { Model = new ModelTemplateModel(modelType, serviceClient) }; await Write(modelTemplate, Path.Combine("models", modelType.Name.ToPascalCase() + ".java")); } //MethodGroups if (serviceClientTemplateModel.MethodGroupModels.Any()) { foreach (var methodGroupModel in serviceClientTemplateModel.MethodGroupModels) { var methodGroupTemplate = new MethodGroupTemplate { Model = methodGroupModel }; await Write(methodGroupTemplate, methodGroupModel.MethodGroupType.ToPascalCase() + "Impl.java"); var methodGroupInterfaceTemplate = new MethodGroupInterfaceTemplate { Model = methodGroupModel }; await Write(methodGroupInterfaceTemplate, methodGroupModel.MethodGroupType.ToPascalCase() + ".java"); } } //Enums foreach (var enumType in serviceClient.EnumTypes) { var enumTemplate = new EnumTemplate { Model = new EnumTemplateModel(enumType), }; await Write(enumTemplate, Path.Combine("models", enumTemplate.Model.Name.ToPascalCase() + ".java")); } // Exception foreach (var exceptionType in serviceClient.ErrorTypes) { var exceptionTemplate = new ExceptionTemplate { Model = new ModelTemplateModel(exceptionType, serviceClient), }; await Write(exceptionTemplate, Path.Combine("models", exceptionTemplate.Model.ExceptionTypeDefinitionName.ToPascalCase() + ".java")); } // package-info.java await Write(new PackageInfoTemplate { Model = new PackageInfoTemplateModel(serviceClient, serviceClient.Name) }, _packageInfoFileName); await Write(new PackageInfoTemplate { Model = new PackageInfoTemplateModel(serviceClient, serviceClient.Name, true) }, Path.Combine("models", _packageInfoFileName)); }
/// <summary> /// Generates C# code for service client. /// </summary> /// <param name="serviceClient"></param> /// <returns></returns> public override async Task Generate(ServiceClient serviceClient) { var serviceClientTemplateModel = new AzureServiceClientTemplateModel(serviceClient); // Service client var serviceClientTemplate = new AzureServiceClientTemplate { Model = serviceClientTemplateModel, }; await Write(serviceClientTemplate, serviceClient.Name.ToPascalCase() + "Impl.java"); var serviceClientInterfaceTemplate = new AzureServiceClientInterfaceTemplate { Model = serviceClientTemplateModel, }; await Write(serviceClientInterfaceTemplate, serviceClient.Name.ToPascalCase() + ".java"); //Models foreach (var modelType in serviceClient.ModelTypes.Concat(serviceClient.HeaderTypes)) { if (modelType.Extensions.ContainsKey(AzureExtensions.ExternalExtension) && (bool)modelType.Extensions[AzureExtensions.ExternalExtension]) { continue; } var modelTemplate = new ModelTemplate { Model = new AzureModelTemplateModel(modelType, serviceClient) }; await Write(modelTemplate, Path.Combine("models", modelType.Name.ToPascalCase() + ".java")); } //MethodGroups if (serviceClientTemplateModel.MethodGroupModels.Any()) { foreach (var methodGroupModel in serviceClientTemplateModel.MethodGroupModels) { var methodGroupTemplate = new AzureMethodGroupTemplate { Model = (AzureMethodGroupTemplateModel)methodGroupModel }; await Write(methodGroupTemplate, methodGroupModel.MethodGroupType.ToPascalCase() + "Impl.java"); var methodGroupInterfaceTemplate = new AzureMethodGroupInterfaceTemplate { Model = (AzureMethodGroupTemplateModel)methodGroupModel }; await Write(methodGroupInterfaceTemplate, methodGroupModel.MethodGroupType.ToPascalCase() + ".java"); } } //Enums foreach (var enumType in serviceClient.EnumTypes) { var enumTemplate = new EnumTemplate { Model = new EnumTemplateModel(enumType), }; await Write(enumTemplate, Path.Combine("models", enumTemplate.Model.Name.ToPascalCase() + ".java")); } // Page class foreach (var pageClass in pageClasses) { var pageTemplate = new PageTemplate { Model = new PageTemplateModel(pageClass.Value, pageClass.Key.Key, pageClass.Key.Value), }; await Write(pageTemplate, Path.Combine("models", pageTemplate.Model.TypeDefinitionName + ".java")); } // Exceptions foreach (var exceptionType in serviceClient.ErrorTypes) { if (exceptionType.Name == "CloudError") { continue; } var exceptionTemplate = new ExceptionTemplate { Model = new ModelTemplateModel(exceptionType, serviceClient), }; await Write(exceptionTemplate, Path.Combine("models", exceptionTemplate.Model.ExceptionTypeDefinitionName + ".java")); } // package-info.java await Write(new PackageInfoTemplate { Model = new PackageInfoTemplateModel(serviceClient, serviceClient.Name) }, _packageInfoFileName); await Write(new PackageInfoTemplate { Model = new PackageInfoTemplateModel(serviceClient, serviceClient.Name, true) }, Path.Combine("models", _packageInfoFileName)); }
/// <summary> /// Generates C# code for service client. /// </summary> /// <param name="serviceClient"></param> /// <returns></returns> public override async Task Generate(ServiceClient serviceClient) { // Service client var serviceClientTemplate = new AzureServiceClientTemplate { Model = new AzureServiceClientTemplateModel(serviceClient), }; await Write(serviceClientTemplate, serviceClient.Name + ".cs"); // Service client extensions var extensionsTemplate = new ExtensionsTemplate { Model = new AzureExtensionsTemplateModel(serviceClient, null), }; await Write(extensionsTemplate, serviceClient.Name + "Extensions.cs"); // Service client interface var serviceClientInterfaceTemplate = new ServiceClientInterfaceTemplate { Model = new AzureServiceClientTemplateModel(serviceClient), }; await Write(serviceClientInterfaceTemplate, "I" + serviceClient.Name + ".cs"); // Operations foreach (var group in serviceClient.MethodGroups) { // Operation var operationsTemplate = new AzureMethodGroupTemplate { Model = new AzureMethodGroupTemplateModel(serviceClient, group), }; await Write(operationsTemplate, operationsTemplate.Model.MethodGroupType + ".cs"); // Service client extensions var operationExtensionsTemplate = new ExtensionsTemplate { Model = new AzureExtensionsTemplateModel(serviceClient, group), }; await Write(operationExtensionsTemplate, operationExtensionsTemplate.Model.ExtensionName + "Extensions.cs"); // Operation interface var operationsInterfaceTemplate = new MethodGroupInterfaceTemplate { Model = new AzureMethodGroupTemplateModel(serviceClient, group), }; await Write(operationsInterfaceTemplate, "I" + operationsInterfaceTemplate.Model.MethodGroupType + ".cs"); } // Models foreach (var model in serviceClient.ModelTypes.Concat(serviceClient.HeaderTypes)) { if (model.Extensions.ContainsKey(AzureExtensions.ExternalExtension) && (bool)model.Extensions[AzureExtensions.ExternalExtension]) { continue; } var modelTemplate = new ModelTemplate { Model = new AzureModelTemplateModel(model), }; await Write(modelTemplate, Path.Combine("Models", model.Name + ".cs")); } // Enums foreach (var enumType in serviceClient.EnumTypes) { var enumTemplate = new EnumTemplate { Model = new EnumTemplateModel(enumType), }; await Write(enumTemplate, Path.Combine("Models", enumTemplate.Model.TypeDefinitionName + ".cs")); } // Page class foreach (var pageClass in pageClasses) { var pageTemplate = new PageTemplate { Model = new PageTemplateModel(pageClass.Value, pageClass.Key.Key, pageClass.Key.Value), }; await Write(pageTemplate, Path.Combine("Models", pageTemplate.Model.TypeDefinitionName + ".cs")); } // Exceptions foreach (var exceptionType in serviceClient.ErrorTypes) { if (exceptionType.Name == "CloudError") { continue; } var exceptionTemplate = new ExceptionTemplate { Model = new ModelTemplateModel(exceptionType), }; await Write(exceptionTemplate, Path.Combine("Models", exceptionTemplate.Model.ExceptionTypeDefinitionName + ".cs")); } }
private async Task GenerateClientSideCode(CodeModelCs codeModel) { CompositeTypeCs.DefaultPropertyTypeSelectionStrategy = new PropertyTypeSelectionStrategy(); var usings = new List <string>(codeModel.Usings); var methods = codeModel.Methods.Where(m => m.Group.IsNullOrEmpty()).Cast <MethodCs>().ToList(); var project = new ProjectModel { RootNameSpace = codeModel.Namespace }; var metricsTemplate = new MetricsTemplate { Model = methods }; var metricsFilePath = "Metrics.cs"; project.FilePaths.Add(metricsFilePath); await Write(metricsTemplate, metricsFilePath); var responseTemplate = new ResponseTemplate(); var responseFilePath = "Response.cs"; project.FilePaths.Add(responseFilePath); await Write(responseTemplate, responseFilePath); usings.Add("System"); usings.Add("System.Collections.Generic"); usings.Add("System.Linq"); usings.Add("System.Threading"); usings.Add("System.Threading.Tasks"); usings.Add("Microsoft.Rest"); usings.Add("System.IO"); usings.Add("Microsoft.Rest.Serialization"); usings.Add("System.Net.Http"); usings.Add("Agoda.Frameworks.Http"); usings.Add("Agoda.Frameworks.Http.AutoRestExt"); usings.Add("Newtonsoft.Json"); usings.Add($"{codeModel.Namespace}.Models"); codeModel.Usings = usings.Where(u => !string.IsNullOrWhiteSpace(u)).Distinct(); // Service client var serviceClientTemplate = new ServiceClientTemplate { Model = codeModel }; var clientPath = $"{codeModel.Name}{ImplementationFileExtension}"; project.FilePaths.Add(clientPath); await Write(serviceClientTemplate, clientPath); // Service client interface var serviceClientInterfaceTemplate = new ServiceClientInterfaceTemplate { Model = codeModel }; var interfacePath = $"I{codeModel.Name}{ImplementationFileExtension}"; project.FilePaths.Add(interfacePath); await Write(serviceClientInterfaceTemplate, interfacePath); var apiBaseTemplate = new ApiBaseTemplate { Model = codeModel }; var apiBaseCsPath = "ApiBase.cs"; project.FilePaths.Add(apiBaseCsPath); await Write(apiBaseTemplate, apiBaseCsPath); // operations foreach (var methodGroup1 in codeModel.Operations) { var methodGroup = (MethodGroupCs)methodGroup1; if (!methodGroup.Name.IsNullOrEmpty()) { // Operation var operationsTemplate = new MethodGroupTemplate { Model = methodGroup }; var operationsFilePath = $"{operationsTemplate.Model.TypeName}{ImplementationFileExtension}"; project.FilePaths.Add(operationsFilePath); await Write(operationsTemplate, operationsFilePath); // Operation interface var operationsInterfaceTemplate = new MethodGroupInterfaceTemplate { Model = methodGroup }; var operationsInterfacePath = $"I{operationsInterfaceTemplate.Model.TypeName}{ImplementationFileExtension}"; project.FilePaths.Add(operationsInterfacePath); await Write(operationsInterfaceTemplate, operationsInterfacePath); } } // Models foreach (CompositeTypeCs model in codeModel.ModelTypes.Union(codeModel.HeaderTypes)) { if (model.Extensions.ContainsKey(SwaggerExtensions.ExternalExtension) && (bool)model.Extensions[SwaggerExtensions.ExternalExtension]) { continue; } var modelTemplate = new ModelTemplate { Model = model }; var modelPath = Path.Combine(Settings.Instance.ModelsName, $"{model.Name}{ImplementationFileExtension}"); project.FilePaths.Add(modelPath); await Write(modelTemplate, modelPath); } // Enums foreach (EnumTypeCs enumType in codeModel.EnumTypes) { var enumTemplate = new EnumTemplate { Model = enumType }; var enumFilePath = Path.Combine(Settings.Instance.ModelsName, $"{enumTemplate.Model.Name}{ImplementationFileExtension}"); project.FilePaths.Add(enumFilePath); await Write(enumTemplate, enumFilePath); } // Exceptions foreach (CompositeTypeCs exceptionType in codeModel.ErrorTypes) { var exceptionTemplate = new ExceptionTemplate { Model = exceptionType, }; var exceptionFilePath = Path.Combine(Settings.Instance.ModelsName, $"{exceptionTemplate.Model.ExceptionTypeDefinitionName}{ImplementationFileExtension}"); project.FilePaths.Add(exceptionFilePath); await Write(exceptionTemplate, exceptionFilePath); } // Xml Serialization if (codeModel.ShouldGenerateXmlSerialization) { var xmlSerializationTemplate = new XmlSerializationTemplate(); var xmlSerializationPath = Path.Combine(Settings.Instance.ModelsName, $"{XmlSerialization.XmlDeserializationClass}{ImplementationFileExtension}"); project.FilePaths.Add(xmlSerializationPath); await Write(xmlSerializationTemplate, xmlSerializationPath); } }
protected virtual async Task GenerateClientSideCode(CodeModelCs codeModel) { // Service client var serviceClientTemplate = new ServiceClientTemplate { Model = codeModel }; await Write(serviceClientTemplate, $"{codeModel.Name}{ImplementationFileExtension}"); // Service client interface var serviceClientInterfaceTemplate = new ServiceClientInterfaceTemplate { Model = codeModel }; await Write(serviceClientInterfaceTemplate, $"I{codeModel.Name}{ImplementationFileExtension}"); // operations foreach (MethodGroupCs methodGroup in codeModel.Operations) { if (!methodGroup.Name.IsNullOrEmpty()) { // Operation var operationsTemplate = new MethodGroupTemplate { Model = methodGroup }; await Write(operationsTemplate, $"{operationsTemplate.Model.TypeName}{ImplementationFileExtension}"); // Operation interface var operationsInterfaceTemplate = new MethodGroupInterfaceTemplate { Model = methodGroup }; await Write(operationsInterfaceTemplate, $"I{operationsInterfaceTemplate.Model.TypeName}{ImplementationFileExtension}"); } var operationExtensionsTemplate = new ExtensionsTemplate { Model = methodGroup }; await Write(operationExtensionsTemplate, $"{methodGroup.ExtensionTypeName}Extensions{ImplementationFileExtension}"); } // Models foreach (CompositeTypeCs model in codeModel.ModelTypes.Union(codeModel.HeaderTypes)) { if (model.Extensions.ContainsKey(SwaggerExtensions.ExternalExtension) && (bool)model.Extensions[SwaggerExtensions.ExternalExtension]) { continue; } var modelTemplate = new ModelTemplate { Model = model }; await Write(modelTemplate, Path.Combine(Settings.Instance.ModelsName, $"{model.Name}{ImplementationFileExtension}")); } // Enums foreach (EnumTypeCs enumType in codeModel.EnumTypes) { var enumTemplate = new EnumTemplate { Model = enumType }; await Write(enumTemplate, Path.Combine(Settings.Instance.ModelsName, $"{enumTemplate.Model.Name}{ImplementationFileExtension}")); } // Exceptions foreach (CompositeTypeCs exceptionType in codeModel.ErrorTypes) { var exceptionTemplate = new ExceptionTemplate { Model = exceptionType, }; await Write(exceptionTemplate, Path.Combine(Settings.Instance.ModelsName, $"{exceptionTemplate.Model.ExceptionTypeDefinitionName}{ImplementationFileExtension}")); } // Xml Serialization if (codeModel.ShouldGenerateXmlSerialization) { var xmlSerializationTemplate = new XmlSerializationTemplate(); await Write(xmlSerializationTemplate, Path.Combine(Settings.Instance.ModelsName, $"{XmlSerialization.XmlDeserializationClass}{ImplementationFileExtension}")); } }
/// <summary> /// Generate Python client code for given ServiceClient. /// </summary> /// <param name="cm"></param> /// <returns></returns> public override async Task Generate(CodeModel cm) { var codeModel = cm as CodeModelPya; if (codeModel == null) { throw new Exception("CodeModel is not a Python Azure Code Model"); } // Service client var setupTemplate = new SetupTemplate { Model = codeModel }; await Write(setupTemplate, "setup.py"); var serviceClientInitTemplate = new ServiceClientInitTemplate { Model = codeModel }; await Write(serviceClientInitTemplate, Path.Combine(codeModel.PackageName, "__init__.py")); var serviceClientTemplate = new AzureServiceClientTemplate { Model = codeModel, }; await Write(serviceClientTemplate, Path.Combine(codeModel.PackageName, codeModel.Name.ToPythonCase() + ".py")); var versionTemplate = new VersionTemplate { Model = codeModel, }; await Write(versionTemplate, Path.Combine(codeModel.PackageName, "version.py")); var exceptionTemplate = new ExceptionTemplate { Model = codeModel, }; await Write(exceptionTemplate, Path.Combine(codeModel.PackageName, "exceptions.py")); var credentialTemplate = new CredentialTemplate { Model = codeModel, }; await Write(credentialTemplate, Path.Combine(codeModel.PackageName, "credentials.py")); //Models var models = codeModel.ModelTemplateModels.Where(each => !each.Extensions.ContainsKey(AzureExtensions.ExternalExtension)); if (models.Any()) { var modelInitTemplate = new AzureModelInitTemplate { Model = codeModel }; await Write(modelInitTemplate, Path.Combine(codeModel.PackageName, "models", "__init__.py")); foreach (var modelType in models) { var modelTemplate = new ModelTemplate { Model = modelType }; await Write(modelTemplate, Path.Combine(codeModel.PackageName, "models", modelType.Name.ToPythonCase() + ".py")); } } //MethodGroups if (codeModel.MethodGroupModels.Any()) { var methodGroupIndexTemplate = new MethodGroupInitTemplate { Model = codeModel }; await Write(methodGroupIndexTemplate, Path.Combine(codeModel.PackageName, "operations", "__init__.py")); foreach (var methodGroupModel in codeModel.MethodGroupModels) { var methodGroupTemplate = new AzureMethodGroupTemplate { Model = methodGroupModel as MethodGroupPya }; await Write(methodGroupTemplate, Path.Combine(codeModel.PackageName, "operations", ((string) methodGroupModel.TypeName).ToPythonCase() + ".py")); } } // Enums if (codeModel.EnumTypes.Any()) { var enumTemplate = new EnumTemplate { Model = codeModel.EnumTypes }; await Write(enumTemplate, Path.Combine(codeModel.PackageName, "models", codeModel.Name.ToPythonCase() + "_enums.py")); } // Page class foreach (var pageModel in codeModel.PageModels) { var pageTemplate = new PageTemplate { Model = pageModel }; await Write(pageTemplate, Path.Combine(codeModel.PackageName, "models", pageModel.TypeDefinitionName.ToPythonCase() + ".py")); } }
/// <summary> /// Generate Python client code for given ServiceClient. /// </summary> /// <param name="serviceClient"></param> /// <returns></returns> public override async Task Generate(CodeModel cm) { var codeModel = cm as CodeModelPy; if (codeModel == null) { throw new Exception("Code model is not a Python Code Model"); } // Service client var setupTemplate = new SetupTemplate { Model = codeModel }; await Write(setupTemplate, "setup.py"); var serviceClientInitTemplate = new ServiceClientInitTemplate { Model = codeModel }; await Write(serviceClientInitTemplate, Path.Combine(codeModel.PackageName, "__init__.py")); var serviceClientTemplate = new ServiceClientTemplate { Model = codeModel }; await Write(serviceClientTemplate, Path.Combine(codeModel.PackageName, codeModel.Name.ToPythonCase() + ".py")); var versionTemplate = new VersionTemplate { Model = codeModel }; await Write(versionTemplate, Path.Combine(codeModel.PackageName, "version.py")); var exceptionTemplate = new ExceptionTemplate { Model = codeModel }; await Write(exceptionTemplate, Path.Combine(codeModel.PackageName, "exceptions.py")); var credentialTemplate = new CredentialTemplate { Model = codeModel }; await Write(credentialTemplate, Path.Combine(codeModel.PackageName, "credentials.py")); //Models if (codeModel.ModelTypes.Any()) { var modelInitTemplate = new ModelInitTemplate { Model = codeModel }; await Write(modelInitTemplate, Path.Combine(codeModel.PackageName, "models", "__init__.py")); foreach (var modelType in codeModel.ModelTemplateModels) { var modelTemplate = new ModelTemplate { Model = modelType }; await Write(modelTemplate, Path.Combine(codeModel.PackageName, "models", ((string)modelType.Name).ToPythonCase() + ".py")); } } //MethodGroups if (codeModel.MethodGroupModels.Any()) { var methodGroupIndexTemplate = new MethodGroupInitTemplate { Model = codeModel }; await Write(methodGroupIndexTemplate, Path.Combine(codeModel.PackageName, "operations", "__init__.py")); foreach (var methodGroupModel in codeModel.MethodGroupModels) { var methodGroupTemplate = new MethodGroupTemplate { Model = methodGroupModel }; await Write(methodGroupTemplate, Path.Combine(codeModel.PackageName, "operations", ((string)methodGroupModel.TypeName).ToPythonCase() + ".py")); } } // Enums if (codeModel.EnumTypes.Any()) { var enumTemplate = new EnumTemplate { Model = codeModel.EnumTypes }; await Write(enumTemplate, Path.Combine(codeModel.PackageName, "models", codeModel.Name.ToPythonCase() + "_enums.py")); } }
/// <summary> /// Generates C# code for service client. /// </summary> /// <param name="cm"></param> /// <returns></returns> public override async Task Generate(CodeModel cm) { // get c# specific codeModel var codeModel = cm as CodeModelCs; if (codeModel == null) { throw new InvalidCastException("CodeModel is not a c# CodeModel"); } // Service client var serviceClientTemplate = new ServiceClientTemplate { Model = codeModel }; await Write(serviceClientTemplate, $"{codeModel.Name}{ImplementationFileExtension}"); // Service client interface var serviceClientInterfaceTemplate = new ServiceClientInterfaceTemplate { Model = codeModel }; await Write(serviceClientInterfaceTemplate, $"I{codeModel.Name}{ImplementationFileExtension}"); // operations foreach (MethodGroupCs methodGroup in codeModel.Operations) { if (!methodGroup.Name.IsNullOrEmpty()) { // Operation var operationsTemplate = new MethodGroupTemplate { Model = methodGroup }; await Write(operationsTemplate, $"{operationsTemplate.Model.TypeName}{ImplementationFileExtension}"); // Operation interface var operationsInterfaceTemplate = new MethodGroupInterfaceTemplate { Model = methodGroup }; await Write(operationsInterfaceTemplate, $"I{operationsInterfaceTemplate.Model.TypeName}{ImplementationFileExtension}"); } var operationExtensionsTemplate = new ExtensionsTemplate { Model = methodGroup }; await Write(operationExtensionsTemplate, $"{methodGroup.ExtensionTypeName}Extensions{ImplementationFileExtension}"); } // Models foreach (CompositeTypeCs model in codeModel.ModelTypes.Union(codeModel.HeaderTypes)) { var modelTemplate = new ModelTemplate { Model = model }; await Write(modelTemplate, Path.Combine(Settings.Instance.ModelsName, $"{model.Name}{ImplementationFileExtension}")); } // Enums foreach (EnumTypeCs enumType in codeModel.EnumTypes) { var enumTemplate = new EnumTemplate { Model = enumType }; await Write(enumTemplate, Path.Combine(Settings.Instance.ModelsName, $"{enumTemplate.Model.Name}{ImplementationFileExtension}")); } // Exceptions foreach (CompositeTypeCs exceptionType in codeModel.ErrorTypes) { var exceptionTemplate = new ExceptionTemplate { Model = exceptionType, }; await Write(exceptionTemplate, Path.Combine(Settings.Instance.ModelsName, $"{exceptionTemplate.Model.ExceptionTypeDefinitionName}{ImplementationFileExtension}")); } }
/// <summary> /// Generate Java client code for given ServiceClient. /// </summary> /// <param name="serviceClient"></param> /// <returns></returns> public override async Task Generate(CodeModel cm) { // get Java specific codeModel var codeModel = cm as CodeModelJv; if (codeModel == null) { throw new InvalidCastException("CodeModel is not a Java CodeModel"); } // Service client var serviceClientTemplate = new ServiceClientTemplate { Model = codeModel }; await Write(serviceClientTemplate, $"{Path.Combine("implementation", cm.Name.ToPascalCase() + "Impl")}{ImplementationFileExtension}"); // Service client interface var serviceClientInterfaceTemplate = new ServiceClientInterfaceTemplate { Model = codeModel }; await Write(serviceClientInterfaceTemplate, $"{cm.Name.ToPascalCase()}{ImplementationFileExtension}"); // operations foreach (MethodGroupJv methodGroup in codeModel.AllOperations) { // Operation var operationsTemplate = new MethodGroupTemplate { Model = methodGroup }; await Write(operationsTemplate, $"{Path.Combine("implementation", methodGroup.TypeName.ToPascalCase())}Impl{ImplementationFileExtension}"); // Operation interface var operationsInterfaceTemplate = new MethodGroupInterfaceTemplate { Model = methodGroup }; await Write(operationsInterfaceTemplate, $"{methodGroup.TypeName.ToPascalCase()}{ImplementationFileExtension}"); } //Models foreach (CompositeTypeJv modelType in cm.ModelTypes.Union(codeModel.HeaderTypes)) { var modelTemplate = new ModelTemplate { Model = modelType }; await Write(modelTemplate, Path.Combine("models", $"{modelType.Name.ToPascalCase()}{ImplementationFileExtension}")); } // Enums foreach (EnumTypeJv enumType in cm.EnumTypes) { var enumTemplate = new EnumTemplate { Model = enumType }; await Write(enumTemplate, Path.Combine("models", $"{enumTemplate.Model.Name.ToPascalCase()}{ImplementationFileExtension}")); } // Exceptions foreach (CompositeTypeJv exceptionType in codeModel.ErrorTypes) { var exceptionTemplate = new ExceptionTemplate { Model = exceptionType }; await Write(exceptionTemplate, Path.Combine("models", $"{exceptionTemplate.Model.ExceptionTypeDefinitionName.ToPascalCase()}{ImplementationFileExtension}")); } // package-info.java await Write(new PackageInfoTemplate { Model = new PackageInfoTemplateModel(cm) }, _packageInfoFileName); await Write(new PackageInfoTemplate { Model = new PackageInfoTemplateModel(cm, "implementation") }, Path.Combine("implementation", _packageInfoFileName)); await Write(new PackageInfoTemplate { Model = new PackageInfoTemplateModel(cm, "models") }, Path.Combine("models", _packageInfoFileName)); }
private async Task GenerateClientSideCode(CodeModelCs codeModel) { CompositeTypeCs.DefaultPropertyTypeSelectionStrategy = new WrappedPropertyTypeSelectionStrategy(); var usings = new List <string>(); var methodGroups = codeModel.Operations.Cast <MethodGroupCs>(); var methods = codeModel.Methods.Where(m => m.Group.IsNullOrEmpty()).Cast <MethodCs>().ToList(); var project = new ProjectModel { RootNameSpace = codeModel.Namespace }; var metricsTemplate = new MetricsTemplate { Model = methods }; var metricsFilePath = "Metrics.cs"; await Write(metricsTemplate, metricsFilePath); var brokenRuleTemplate = new BrokenRuleTemplate(); var brokenRuleFilePath = "BrokenRule.cs"; await Write(brokenRuleTemplate, brokenRuleFilePath); var responseTemplate = new ResponseTemplate(); var responseFilePath = "Response.cs"; await Write(responseTemplate, responseFilePath); usings.AddRange(new[] { "System", "System.Collections.Generic", "System.Linq", "System.Threading", "System.Threading.Tasks", "Microsoft.Rest", "System.IO", "Microsoft.Rest.Serialization", "Agoda.RoundRobin", "Newtonsoft.Json", $"{codeModel.Namespace}.Models", "Agoda.RoundRobin.Constants", "System.ComponentModel", "AutoRest.CSharp.LoadBalanced.Json" }); usings = usings.Where(u => !string.IsNullOrWhiteSpace(u)).Distinct().ToList(); codeModel.Usings = usings; var clients = methods.GroupBy(m => m.Tags.First()).ToArray(); var libPath = Path.Combine(Settings.Instance.OutputDirectory, "lib"); await new LibFolderCreator(libPath).ExecuteAsync(); foreach (var client in clients) { var clientName = $"{client.Key.ToPascalCase()}Client"; var clientMethods = client.ToArray(); var clientClassFileName = $"{clientName}{ImplementationFileExtension}"; var clientInterfaceFileName = $"I{clientClassFileName}"; var model = new Tuple <CodeModelCs, string, MethodCs[]>(codeModel, clientName, clientMethods); // Service client interface var serviceClientInterfaceTemplate = new ServiceClientInterfaceTemplate { Model = model }; await Write(serviceClientInterfaceTemplate, clientInterfaceFileName); // Service client var serviceClientTemplate = new ServiceClientTemplate { Model = model }; await Write(serviceClientTemplate, clientClassFileName); } var apiBaseTemplate = new ApiBaseTemplate { Model = codeModel }; var apiBaseCsPath = "ApiBase.cs"; await Write(apiBaseTemplate, apiBaseCsPath); var badRequestExceptionTemplate = new BadRequestExceptionTemplate(); var badRequestPath = "BadRequestException.cs"; await Write(badRequestExceptionTemplate, badRequestPath); // operations foreach (var methodGroup in methodGroups) { if (methodGroup.Name.IsNullOrEmpty()) { continue; } // Operation var operationsTemplate = new MethodGroupTemplate { Model = methodGroup }; var operationsFilePath = $"{operationsTemplate.Model.TypeName}{ImplementationFileExtension}"; await Write(operationsTemplate, operationsFilePath); // Operation interface var operationsInterfaceTemplate = new MethodGroupInterfaceTemplate { Model = methodGroup }; var operationsInterfacePath = $"I{operationsInterfaceTemplate.Model.TypeName}{ImplementationFileExtension}"; await Write(operationsInterfaceTemplate, operationsInterfacePath); } // Models var models = codeModel.ModelTypes.Union(codeModel.HeaderTypes).Cast <CompositeTypeCs>(); foreach (var model in models) { if (model.Extensions.ContainsKey(SwaggerExtensions.ExternalExtension) && (bool)model.Extensions[SwaggerExtensions.ExternalExtension]) { continue; } Template <CompositeTypeCs> modelTemplate = null; if (model.PropertyTypeSelectionStrategy.IsCollection(model)) { modelTemplate = new CollectionModelTemplate { Model = model }; } else { modelTemplate = new ModelTemplate { Model = model }; } var modelPath = Path.Combine(Settings.Instance.ModelsName, $"{model.Name}{ImplementationFileExtension}"); await Write(modelTemplate, modelPath); } // Enums foreach (EnumTypeCs enumType in codeModel.EnumTypes) { var enumTemplate = new EnumTemplate { Model = enumType }; var enumFilePath = Path.Combine(Settings.Instance.ModelsName, $"{enumTemplate.Model.Name}{ImplementationFileExtension}"); await Write(enumTemplate, enumFilePath); } // Exceptions foreach (CompositeTypeCs exceptionType in codeModel.ErrorTypes) { var exceptionTemplate = new ExceptionTemplate { Model = exceptionType, }; var exceptionFilePath = Path.Combine(Settings.Instance.ModelsName, $"{exceptionTemplate.Model.ExceptionTypeDefinitionName}{ImplementationFileExtension}"); await Write(exceptionTemplate, exceptionFilePath); } // CB models var couchbaseModels = codeModel.ModelTypes.Union(codeModel.HeaderTypes).Cast <CompositeTypeCs>(); foreach (var model in couchbaseModels) { model.isCouchbaseModel = true; if (model.Extensions.ContainsKey(SwaggerExtensions.ExternalExtension) && (bool)model.Extensions[SwaggerExtensions.ExternalExtension]) { continue; } Template <CompositeTypeCs> modelTemplate = null; if (model.PropertyTypeSelectionStrategy.IsCollection(model)) { modelTemplate = new CollectionModelTemplate { Model = model }; } else { modelTemplate = new ModelTemplate { Model = model }; } var modelPath = Path.Combine(Settings.Instance.ModelsName, $"Couchbase/{model.Name}{ImplementationFileExtension}"); project.FilePaths.Add(modelPath); await Write(modelTemplate, modelPath); } }
/// <summary> /// Generate Python client code for given ServiceClient. /// </summary> /// <param name="serviceClient"></param> /// <returns></returns> public override async Task Generate(ServiceClient serviceClient) { var serviceClientTemplateModel = new ServiceClientTemplateModel(serviceClient); if (!string.IsNullOrWhiteSpace(Version)) { serviceClientTemplateModel.Version = Version; } // Service client var setupTemplate = new SetupTemplate { Model = serviceClientTemplateModel }; await Write(setupTemplate, "setup.py"); var serviceClientInitTemplate = new ServiceClientInitTemplate { Model = serviceClientTemplateModel }; await Write(serviceClientInitTemplate, Path.Combine(serviceClientTemplateModel.PackageName, "__init__.py")); var serviceClientTemplate = new ServiceClientTemplate { Model = serviceClientTemplateModel, }; await Write(serviceClientTemplate, Path.Combine(serviceClientTemplateModel.PackageName, serviceClientTemplateModel.Name.ToPythonCase() + ".py")); var versionTemplate = new VersionTemplate { Model = serviceClientTemplateModel, }; await Write(versionTemplate, Path.Combine(serviceClientTemplateModel.PackageName, "version.py")); var exceptionTemplate = new ExceptionTemplate { Model = serviceClientTemplateModel, }; await Write(exceptionTemplate, Path.Combine(serviceClientTemplateModel.PackageName, "exceptions.py")); var credentialTemplate = new CredentialTemplate { Model = serviceClientTemplateModel, }; await Write(credentialTemplate, Path.Combine(serviceClientTemplateModel.PackageName, "credentials.py")); //Models if (serviceClient.ModelTypes.Any()) { var modelInitTemplate = new ModelInitTemplate { Model = new ModelInitTemplateModel(serviceClient) }; await Write(modelInitTemplate, Path.Combine(serviceClientTemplateModel.PackageName, "models", "__init__.py")); foreach (var modelType in serviceClientTemplateModel.ModelTemplateModels) { var modelTemplate = new ModelTemplate { Model = modelType }; await Write(modelTemplate, Path.Combine(serviceClientTemplateModel.PackageName, "models", modelType.Name.ToPythonCase() + ".py")); } } //MethodGroups if (serviceClientTemplateModel.MethodGroupModels.Any()) { var methodGroupIndexTemplate = new MethodGroupInitTemplate { Model = serviceClientTemplateModel }; await Write(methodGroupIndexTemplate, Path.Combine(serviceClientTemplateModel.PackageName, "operations", "__init__.py")); foreach (var methodGroupModel in serviceClientTemplateModel.MethodGroupModels) { var methodGroupTemplate = new MethodGroupTemplate { Model = methodGroupModel }; await Write(methodGroupTemplate, Path.Combine(serviceClientTemplateModel.PackageName, "operations", methodGroupModel.MethodGroupType.ToPythonCase() + ".py")); } } // Enums if (serviceClient.EnumTypes.Any()) { var enumTemplate = new EnumTemplate { Model = new EnumTemplateModel(serviceClient.EnumTypes), }; await Write(enumTemplate, Path.Combine(serviceClientTemplateModel.PackageName, "models", serviceClientTemplateModel.Name.ToPythonCase() + "_enums.py")); } }
/// <summary> /// Generate Python client code for given ServiceClient. /// </summary> /// <param name="cm"></param> /// <returns></returns> public override async Task Generate(CodeModel cm) { var codeModel = cm as CodeModelPya; if (codeModel == null) { throw new Exception("CodeModel is not a Python Azure Code Model"); } // Service client var setupTemplate = new SetupTemplate { Model = codeModel }; await Write(setupTemplate, "setup.py"); var serviceClientInitTemplate = new ServiceClientInitTemplate { Model = codeModel }; await Write(serviceClientInitTemplate, Path.Combine(codeModel.PackageName, "__init__.py")); var serviceClientTemplate = new AzureServiceClientTemplate { Model = codeModel, }; await Write(serviceClientTemplate, Path.Combine(codeModel.PackageName, codeModel.Name.ToPythonCase() + ".py")); var versionTemplate = new VersionTemplate { Model = codeModel, }; await Write(versionTemplate, Path.Combine(codeModel.PackageName, "version.py")); var exceptionTemplate = new ExceptionTemplate { Model = codeModel, }; await Write(exceptionTemplate, Path.Combine(codeModel.PackageName, "exceptions.py")); var credentialTemplate = new CredentialTemplate { Model = codeModel, }; await Write(credentialTemplate, Path.Combine(codeModel.PackageName, "credentials.py")); //Models var models = codeModel.ModelTemplateModels.Where(each => !each.Extensions.ContainsKey(AzureExtensions.ExternalExtension)); if (models.Any()) { var modelInitTemplate = new AzureModelInitTemplate { Model = codeModel }; await Write(modelInitTemplate, Path.Combine(codeModel.PackageName, "models", "__init__.py")); foreach (var modelType in models) { var modelTemplate = new ModelTemplate { Model = modelType }; await Write(modelTemplate, Path.Combine(codeModel.PackageName, "models", modelType.Name.ToPythonCase() + ".py")); } } //MethodGroups if (codeModel.MethodGroupModels.Any()) { var methodGroupIndexTemplate = new MethodGroupInitTemplate { Model = codeModel }; await Write(methodGroupIndexTemplate, Path.Combine(codeModel.PackageName, "operations", "__init__.py")); foreach (var methodGroupModel in codeModel.MethodGroupModels) { var methodGroupTemplate = new AzureMethodGroupTemplate { Model = methodGroupModel as MethodGroupPya }; await Write(methodGroupTemplate, Path.Combine(codeModel.PackageName, "operations", ((string)methodGroupModel.TypeName).ToPythonCase() + ".py")); } } // Enums if (codeModel.EnumTypes.Any()) { var enumTemplate = new EnumTemplate { Model = codeModel.EnumTypes }; await Write(enumTemplate, Path.Combine(codeModel.PackageName, "models", codeModel.Name.ToPythonCase() + "_enums.py")); } // Page class foreach (var pageModel in codeModel.PageModels) { var pageTemplate = new PageTemplate { Model = pageModel }; await Write(pageTemplate, Path.Combine(codeModel.PackageName, "models", pageModel.TypeDefinitionName.ToPythonCase() + ".py")); } }
/// <summary> /// Generates C# code for service client. /// </summary> /// <param name="serviceClient"></param> /// <returns></returns> public override async Task Generate(ServiceClient serviceClient) { var serviceClientTemplateModel = new AzureServiceClientTemplateModel(serviceClient); // Service client var serviceClientTemplate = new AzureServiceClientTemplate { Model = serviceClientTemplateModel, }; await Write(serviceClientTemplate, Path.Combine("implementation", serviceClient.Name.ToPascalCase() + "Impl.java")); var serviceClientInterfaceTemplate = new AzureServiceClientInterfaceTemplate { Model = serviceClientTemplateModel, }; await Write(serviceClientInterfaceTemplate, serviceClient.Name.ToPascalCase() + ".java"); //Models foreach (var modelType in serviceClient.ModelTypes.Concat(serviceClient.HeaderTypes)) { if (modelType.Extensions.ContainsKey(AzureExtensions.ExternalExtension) && (bool)modelType.Extensions[AzureExtensions.ExternalExtension]) { continue; } if (modelType.IsResource()) { continue; } var modelTemplate = new ModelTemplate { Model = new AzureModelTemplateModel(modelType, serviceClient) }; await Write(modelTemplate, Path.Combine("models", modelType.Name.ToPascalCase() + ".java")); } //MethodGroups if (serviceClientTemplateModel.MethodGroupModels.Any()) { foreach (var methodGroupModel in serviceClientTemplateModel.MethodGroupModels) { var methodGroupTemplate = new AzureMethodGroupTemplate { Model = (AzureMethodGroupTemplateModel)methodGroupModel }; await Write(methodGroupTemplate, Path.Combine("implementation", methodGroupModel.MethodGroupType.ToPascalCase() + "Impl.java")); var methodGroupInterfaceTemplate = new AzureMethodGroupInterfaceTemplate { Model = (AzureMethodGroupTemplateModel)methodGroupModel }; await Write(methodGroupInterfaceTemplate, methodGroupModel.MethodGroupType.ToPascalCase() + ".java"); } } //Enums foreach (var enumType in serviceClient.EnumTypes) { var enumTemplate = new EnumTemplate { Model = new EnumTemplateModel(enumType), }; await Write(enumTemplate, Path.Combine("models", enumTemplate.Model.Name.ToPascalCase() + ".java")); } // Page class foreach (var pageClass in pageClasses) { var pageTemplate = new PageTemplate { Model = new PageTemplateModel(pageClass.Value, pageClass.Key.Key, pageClass.Key.Value), }; await Write(pageTemplate, Path.Combine("models", pageTemplate.Model.TypeDefinitionName + ".java")); } // Exceptions foreach (var exceptionType in serviceClient.ErrorTypes) { if (exceptionType.Name == "CloudError") { continue; } var exceptionTemplate = new ExceptionTemplate { Model = new ModelTemplateModel(exceptionType, serviceClient), }; await Write(exceptionTemplate, Path.Combine("models", exceptionTemplate.Model.ExceptionTypeDefinitionName + ".java")); } // package-info.java await Write(new PackageInfoTemplate { Model = new PackageInfoTemplateModel(serviceClient, serviceClient.Name) }, _packageInfoFileName); await Write(new PackageInfoTemplate { Model = new PackageInfoTemplateModel(serviceClient, serviceClient.Name, "implementation") }, Path.Combine("implementation", _packageInfoFileName)); await Write(new PackageInfoTemplate { Model = new PackageInfoTemplateModel(serviceClient, serviceClient.Name, "models") }, Path.Combine("models", _packageInfoFileName)); }
/// <summary> /// Generate Python client code for given ServiceClient. /// </summary> /// <param name="serviceClient"></param> /// <returns></returns> public override async Task Generate(CodeModel cm) { var codeModel = cm as CodeModelPy; if (codeModel == null) { throw new Exception("Code model is not a Python Code Model"); } // Service client string[] namespaceParts = codeModel.Namespace.Split('.'); for (int i = 1; i < namespaceParts.Length; ++i) { string initFolderName = Path.Combine(namespaceParts.Take(i).ToArray()); await Write("__import__('pkg_resources').declare_namespace(__name__)", Path.Combine(initFolderName, "__init__.py"), true); } var folderName = codeModel.Name.ToPythonCase().ToLower(); var setupTemplate = new SetupTemplate { Model = codeModel }; await Write(setupTemplate, "setup.py"); var serviceClientInitTemplate = new ServiceClientInitTemplate { Model = codeModel }; await Write(serviceClientInitTemplate, Path.Combine(folderName, "__init__.py")); var serviceClientTemplate = new ServiceClientTemplate { Model = codeModel }; await Write(serviceClientTemplate, Path.Combine(folderName, codeModel.Name.ToPythonCase() + ".py")); var versionTemplate = new VersionTemplate { Model = codeModel }; await Write(versionTemplate, Path.Combine(folderName, "version.py")); var exceptionTemplate = new ExceptionTemplate { Model = codeModel }; await Write(exceptionTemplate, Path.Combine(folderName, "exceptions.py")); var credentialTemplate = new CredentialTemplate { Model = codeModel }; await Write(credentialTemplate, Path.Combine(folderName, "credentials.py")); //Models if (codeModel.ModelTypes.Any()) { var modelInitTemplate = new ModelInitTemplate { Model = codeModel }; await Write(modelInitTemplate, Path.Combine(folderName, "models", "__init__.py")); foreach (var modelType in codeModel.ModelTemplateModels) { var modelTemplate = new ModelTemplate { Model = modelType }; await Write(modelTemplate, Path.Combine(folderName, "models", ((string)modelType.Name).ToPythonCase() + ".py")); } } //MethodGroups if (codeModel.MethodGroupModels.Any()) { var methodGroupIndexTemplate = new MethodGroupInitTemplate { Model = codeModel }; await Write(methodGroupIndexTemplate, Path.Combine(folderName, "operations", "__init__.py")); foreach (var methodGroupModel in codeModel.MethodGroupModels) { var methodGroupTemplate = new MethodGroupTemplate { Model = methodGroupModel }; await Write(methodGroupTemplate, Path.Combine(folderName, "operations", ((string)methodGroupModel.TypeName).ToPythonCase() + ".py")); } } // Enums if (codeModel.EnumTypes.Any()) { var enumTemplate = new EnumTemplate { Model = codeModel.EnumTypes }; await Write(enumTemplate, Path.Combine(folderName, "models", codeModel.Name.ToPythonCase() + "_enums.py")); } }
/// <summary> /// Generates C# code for service client. /// </summary> /// <param name="serviceClient"></param> /// <returns></returns> public override async Task Generate(CodeModel cm) { // get Azure Java specific codeModel var codeModel = cm as CodeModelJvaf; if (codeModel == null) { throw new InvalidCastException("CodeModel is not a Azure Java Fluent CodeModel"); } // Service client var serviceClientTemplate = new AzureServiceClientTemplate { Model = codeModel }; await Write(serviceClientTemplate, $"{Path.Combine("implementation", codeModel.Name.ToPascalCase() + "Impl")}{ImplementationFileExtension}"); // operations foreach (MethodGroupJvaf methodGroup in codeModel.AllOperations) { // Operation var operationsTemplate = new AzureMethodGroupTemplate { Model = methodGroup }; await Write(operationsTemplate, $"{Path.Combine("implementation", methodGroup.TypeName.ToPascalCase())}Inner{ImplementationFileExtension}"); } //Models foreach (CompositeTypeJvaf modelType in cm.ModelTypes.Concat(codeModel.HeaderTypes)) { if (modelType.Extensions.ContainsKey(AzureExtensions.ExternalExtension) && (bool)modelType.Extensions[AzureExtensions.ExternalExtension]) { continue; } if (modelType.IsResource) { continue; } var modelTemplate = new ModelTemplate { Model = modelType }; await Write(modelTemplate, Path.Combine(modelType.ModelsPackage.Trim('.'), $"{modelType.Name.ToPascalCase()}{ImplementationFileExtension}")); } //Enums foreach (EnumTypeJvaf enumType in cm.EnumTypes) { var enumTemplate = new EnumTemplate { Model = enumType }; await Write(enumTemplate, Path.Combine(enumType.ModelsPackage.Trim('.'), $"{enumTemplate.Model.Name.ToPascalCase()}{ImplementationFileExtension}")); } // Page class foreach (var pageClass in codeModel.pageClasses) { var pageTemplate = new PageTemplate { Model = new PageJvaf(pageClass.Value, pageClass.Key.Key, pageClass.Key.Value), }; await Write(pageTemplate, Path.Combine("implementation", $"{pageTemplate.Model.TypeDefinitionName.ToPascalCase()}{ImplementationFileExtension}")); } // Exceptions foreach (CompositeTypeJv exceptionType in codeModel.ErrorTypes) { if (exceptionType.Name == "CloudError") { continue; } var exceptionTemplate = new ExceptionTemplate { Model = exceptionType }; await Write(exceptionTemplate, Path.Combine(exceptionType.ModelsPackage.Trim('.'), $"{exceptionTemplate.Model.ExceptionTypeDefinitionName}{ImplementationFileExtension}")); } // package-info.java await Write(new PackageInfoTemplate { Model = new PackageInfoTemplateModel(cm) }, _packageInfoFileName); await Write(new PackageInfoTemplate { Model = new PackageInfoTemplateModel(cm, "implementation") }, Path.Combine("implementation", _packageInfoFileName)); }
/// <summary> /// Generates C# code for service client. /// </summary> /// <param name="serviceClient"></param> /// <returns></returns> public override async Task Generate(ServiceClient serviceClient) { // Service client var serviceClientTemplate = new ServiceClientTemplate { Model = new ServiceClientTemplateModel(serviceClient, InternalConstructors), }; await Write(serviceClientTemplate, serviceClient.Name + ".cs"); // Service client extensions if (serviceClient.Methods.Any(m => m.Group == null)) { var extensionsTemplate = new ExtensionsTemplate { Model = new ExtensionsTemplateModel(serviceClient, null, SyncMethods), }; await Write(extensionsTemplate, serviceClient.Name + "Extensions.cs"); } // Service client interface var serviceClientInterfaceTemplate = new ServiceClientInterfaceTemplate { Model = new ServiceClientTemplateModel(serviceClient, InternalConstructors), }; await Write(serviceClientInterfaceTemplate, "I" + serviceClient.Name + ".cs"); // Operations foreach (var group in serviceClient.MethodGroups) { // Operation var operationsTemplate = new MethodGroupTemplate { Model = new MethodGroupTemplateModel(serviceClient, group), }; await Write(operationsTemplate, operationsTemplate.Model.MethodGroupType + ".cs"); // Service client extensions var operationExtensionsTemplate = new ExtensionsTemplate { Model = new ExtensionsTemplateModel(serviceClient, group, SyncMethods), }; await Write(operationExtensionsTemplate, group + "Extensions.cs"); // Operation interface var operationsInterfaceTemplate = new MethodGroupInterfaceTemplate { Model = new MethodGroupTemplateModel(serviceClient, group), }; await Write(operationsInterfaceTemplate, "I" + operationsInterfaceTemplate.Model.MethodGroupType + ".cs"); } // Models foreach (var model in serviceClient.ModelTypes.Concat(serviceClient.HeaderTypes)) { var modelTemplate = new ModelTemplate { Model = new ModelTemplateModel(model), }; await Write(modelTemplate, Path.Combine(Settings.ModelsName, model.Name + ".cs")); } // Enums foreach (var enumType in serviceClient.EnumTypes) { var enumTemplate = new EnumTemplate { Model = new EnumTemplateModel(enumType), }; await Write(enumTemplate, Path.Combine(Settings.ModelsName, enumTemplate.Model.TypeDefinitionName + ".cs")); } // Exception foreach (var exceptionType in serviceClient.ErrorTypes) { var exceptionTemplate = new ExceptionTemplate { Model = new ModelTemplateModel(exceptionType), }; await Write(exceptionTemplate, Path.Combine(Settings.ModelsName, exceptionTemplate.Model.ExceptionTypeDefinitionName + ".cs")); } }
/// <summary> /// Generates C# code for service client. /// </summary> /// <param name="cm"></param> /// <returns></returns> public override async Task Generate(CodeModel cm) { var codeModel = cm as CodeModelCsa; if (codeModel == null) { throw new InvalidCastException("CodeModel is not a Azure c# CodeModel"); } // Service client var serviceClientTemplate = new AzureServiceClientTemplate { Model = codeModel }; await Write(serviceClientTemplate, $"{codeModel.Name}{ImplementationFileExtension}"); // Service client interface var serviceClientInterfaceTemplate = new ServiceClientInterfaceTemplate { Model = codeModel }; await Write(serviceClientInterfaceTemplate, "I" + codeModel.Name + ImplementationFileExtension); // Operations foreach (MethodGroupCs group in codeModel.Operations) { if (!group.IsCodeModelMethodGroup) { // Operation var operationsTemplate = new AzureMethodGroupTemplate { Model = group }; await Write(operationsTemplate, operationsTemplate.Model.TypeName + ImplementationFileExtension); // Operation interface var operationsInterfaceTemplate = new MethodGroupInterfaceTemplate { Model = group }; await Write(operationsInterfaceTemplate, $"I{operationsInterfaceTemplate.Model.TypeName}{ImplementationFileExtension}"); } var operationExtensionsTemplate = new ExtensionsTemplate { Model = group }; await Write(operationExtensionsTemplate, $"{group.ExtensionTypeName}Extensions{ImplementationFileExtension}"); } // Models foreach (CompositeTypeCs model in codeModel.ModelTypes.Concat(codeModel.HeaderTypes)) { if (model.Extensions.ContainsKey(AzureExtensions.ExternalExtension) && (bool)model.Extensions[AzureExtensions.ExternalExtension]) { continue; } if (model.IsResource()) { continue; } var modelTemplate = new ModelTemplate { Model = model }; await Write(modelTemplate, Path.Combine(Settings.Instance.ModelsName, $"{model.Name}{ImplementationFileExtension}")); } // Enums foreach (EnumTypeCs enumType in codeModel.EnumTypes) { var enumTemplate = new EnumTemplate { Model = enumType }; await Write(enumTemplate, Path.Combine(Settings.Instance.ModelsName, $"{enumTemplate.Model.Name}{ImplementationFileExtension}")); } // Page class foreach (var pageClass in codeModel.pageClasses) { var pageTemplate = new PageTemplate { Model = new Page(pageClass.Value, pageClass.Key.Key, pageClass.Key.Value) }; await Write(pageTemplate, Path.Combine(Settings.Instance.ModelsName, $"{pageTemplate.Model.TypeDefinitionName}{ImplementationFileExtension}")); } // Exceptions foreach (CompositeTypeCs exceptionType in codeModel.ErrorTypes) { if (exceptionType.Name == "CloudError") { continue; } var exceptionTemplate = new ExceptionTemplate { Model = exceptionType }; await Write(exceptionTemplate, Path.Combine(Settings.Instance.ModelsName, $"{exceptionTemplate.Model.ExceptionTypeDefinitionName}{ImplementationFileExtension}")); } }