Skip to content

Instantly share code, notes, and snippets.

@pjmagee
Created May 19, 2024 15:08
Show Gist options
  • Save pjmagee/8bbb579fdcb790ea26997494521f7871 to your computer and use it in GitHub Desktop.
Save pjmagee/8bbb579fdcb790ea26997494521f7871 to your computer and use it in GitHub Desktop.
type DsgIcisOpenapiKiota struct{}
type Language string
const (
CSharp Language = "CSharp"
Go Language = "Go"
Java Language = "Java"
Python Language = "Python"
)
type Settings struct {
Language Language
Namespace string
Output string
}
func NewSettings(language Language, namespace string, output string) Settings {
return Settings{
Language: language,
Namespace: namespace,
Output: output,
}
}
type Spec struct {
URL string
Settings []Settings
}
func NewSpec(url string, settings []Settings) Spec {
return Spec{
URL: url,
Settings: settings,
}
}
func (m *DsgIcisOpenapiKiota) GenerateKiotaClients(ctx context.Context, directory *dagger.Directory, languages []Language) (string, error) {
var output string = ""
specs := []Spec{
NewSpec("https://developer.icis.com/portals/api/sites/icis-live-portal/liveportal/apis/energyapi/download_spec", []Settings{
NewSettings(CSharp, "Icis.Api.Energy", "Energy"),
NewSettings(Go, "icis/api/energy", "energy"),
NewSettings(Java, "com.icis.api.energy", "src/main/java/com/icis/api/energy"),
NewSettings(Python, "icis_api_energy", "energy"),
}),
NewSpec("https://developer.icis.com/portals/api/sites/icis-live-portal/liveportal/apis/energyforesightapi/download_spec", []Settings{
NewSettings(CSharp, "Icis.Api.EnergyForesight", "EnergyForesight"),
NewSettings(Go, "icis/api/energyforesight", "energyforesight"),
NewSettings(Java, "com.icis.api.energyforesight", "src/main/java/com/icis/api/energyforesight"),
NewSettings(Python, "icis_api_energyforesight", "energyforesight"),
}),
NewSpec("https://developer.icis.com/portals/api/sites/icis-live-portal/liveportal/apis/lnganalyticsapi/download_spec", []Settings{
NewSettings(CSharp, "Icis.Api.LngAnalytics", "LngAnalytics"),
NewSettings(Go, "icis/api/lnganalytics", "lnganalytics"),
NewSettings(Java, "com.icis.api.lnganalytics", "src/main/java/com/icis/api/lnganalytics"),
NewSettings(Python, "icis_api_lnganalytics", "lnganalytics"),
}),
}
for _, spec := range specs {
for _, settings := range spec.Settings {
if slices.Contains(languages, settings.Language) {
ctr := dag.
Container().
From("mcr.microsoft.com/openapi/kiota:1.14.0").
WithDirectory("/app/output", directory).
WithExec([]string{
"generate",
"--output", "/app/output",
// "--output", fmt.Sprintf("/app/output/%s/%s", settings.Language, settings.Output),
"--language", string(settings.Language),
"--openapi", spec.URL,
"--exclude-backward-compatible", "true",
"--log-level", "Debug",
"--clean-output",
"--additional-data", "true",
"--class-name", "ApiClient",
}, ContainerWithExecOpts{
SkipEntrypoint: false,
Stdin: "",
RedirectStdout: "",
RedirectStderr: "",
ExperimentalPrivilegedNesting: true,
InsecureRootCapabilities: true,
})
stdout, err := ctr.Stdout(ctx)
if err != nil {
return stdout, err
}
output += stdout
}
}
}
return output, nil
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment