Created
May 19, 2024 15:11
-
-
Save pjmagee/0acc8be873b013d9882e6c6e109e263e to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<# | |
.SYNOPSIS | |
Generates code using the Kiota generator in the specified languages for defined OpenAPI specs. | |
.DESCRIPTION | |
This script generates code using the Kiota generator in the specified languages for defined OpenAPI specs. | |
Each subfolder in the examples folder is named after the language and the output is placed in a subfolder named after the namespace. | |
The generated code is then expanded to include additional functionality. | |
The additional functionality includes: | |
- Authentication and token management | |
- Logging | |
- Error handling | |
- Kiota client configuration | |
- Consumption of the endpoints defined in the OpenAPI specs and the handling of the responses and cursor pagination | |
.PARAMETER csharp | |
Generate C# code. | |
.PARAMETER go | |
Generate Go code. | |
.PARAMETER java | |
Generate Java code. | |
.PARAMETER python | |
Generate Python code. | |
.PARAMETER all | |
Generate code for all languages. | |
.EXAMPLE | |
.\Use-Kiota-Generator.ps1 -csharp | |
.NOTES | |
Any additional notes about the script. | |
#> | |
param( | |
[Parameter(Mandatory = $false)] | |
[switch] $csharp, | |
[Parameter(Mandatory = $false)] | |
[switch] $go, | |
[Parameter(Mandatory = $false)] | |
[switch] $java, | |
[Parameter(Mandatory = $false)] | |
[switch] $python, | |
[Parameter(Mandatory = $false)] | |
[switch] $all | |
) | |
enum Language { | |
CSharp | |
Go | |
Java | |
Python | |
} | |
## https://learn.microsoft.com/en-us/powershell/scripting/developer/cmdlet/approved-verbs-for-windows-powershell-commands?view=powershell-7.4 | |
class Spec { | |
[string]$url | |
[Settings[]]$settings | |
Spec([string]$url, [Settings[]]$settings) { | |
$this.url = $url | |
$this.settings = $settings | |
} | |
} | |
class Settings { | |
[Language]$language | |
[string]$namespace | |
[string]$output | |
Settings([Language]$language, [string]$namespace, [string]$output) { | |
$this.language = $language | |
$this.namespace = $namespace | |
$this.output = $output | |
} | |
} | |
$specs = @( | |
[Spec]::new("https://developer.icis.com/portals/api/sites/icis-live-portal/liveportal/apis/energyapi/download_spec", | |
@( | |
[Settings]::new([Language]::CSharp, "Icis.Api.Energy", "Energy"), | |
[Settings]::new([Language]::Go, "icis/api/energy", "energy") | |
[Settings]::new([Language]::Java, "com.icis.api.energy", "src/main/java/com/icis/api/energy"), | |
[Settings]::new([Language]::Python, "icis_api_energy", "energy") | |
)), | |
[Spec]::new("https://developer.icis.com/portals/api/sites/icis-live-portal/liveportal/apis/energyforesightapi/download_spec", | |
@( | |
[Settings]::new([Language]::CSharp, "Icis.Api.EnergyForesight", "EnergyForesight"), | |
[Settings]::new([Language]::Go, "icis/api/energyforesight", "energyforesight") | |
[Settings]::new([Language]::Java, "com.icis.api.energyforesight", "src/main/java/com/icis/api/energyforesight"), | |
[Settings]::new([Language]::Python, "icis_api_energyforesight", "energyforesight") | |
)), | |
[Spec]::new("https://developer.icis.com/portals/api/sites/icis-live-portal/liveportal/apis/lnganalyticsapi/download_spec", | |
@( | |
[Settings]::new([Language]::CSharp, "Icis.Api.LngAnalytics", "LngAnalytics"), | |
[Settings]::new([Language]::Go, "icis/api/lnganalytics", "lnganalytics") | |
[Settings]::new([Language]::Java, "com.icis.api.lnganalytics", "src/main/java/com/icis/api/lnganalytics"), | |
[Settings]::new([Language]::Python, "icis_api_lnganalytics", "lnganalytics") | |
)) | |
) | |
function Use-Kiota-Generator { | |
param( | |
[Parameter(Mandatory = $true)] | |
[Language] | |
$language | |
) | |
$specs | ForEach-Object { | |
$spec = $_ | |
$spec.settings | Where-Object { $_.language -eq $language } | ForEach-Object { | |
$lang = $_.language | |
$namespace = $_.namespace | |
$output = $_.output | |
Write-Host "Generating $($lang) for $($spec.url)" | |
docker run -v ${PWD}/examples:/app/output mcr.microsoft.com/openapi/kiota:1.14.0 generate ` | |
--output /app/output/$lang/$output ` | |
--language $lang ` | |
--namespace-name $namespace ` | |
--openapi $($spec.url) ` | |
--exclude-backward-compatible true ` | |
--log-level Debug ` | |
--clean-output ` | |
--additional-data true ` | |
--class-name ApiClient | |
} | |
} | |
} | |
try { | |
$languages = @() | |
if ($all) { | |
$languages = [Enum]::GetValues([Language]) | |
} | |
else { | |
if ($csharp) { $languages += [Language]::CSharp } | |
if ($go) { $languages += [Language]::Go } | |
if ($java) { $languages += [Language]::Java } | |
if ($python) { $languages += [Language]::Python } | |
} | |
$languages | ForEach-Object { | |
Use-Kiota-Generator -language $_ | |
} | |
} | |
catch { | |
Write-Error $_.Exception.Message | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment