224 lines
5.1 KiB
Cheetah
224 lines
5.1 KiB
Cheetah
|
|
// Code generated by ndpgen. DO NOT EDIT.
|
||
|
|
//
|
||
|
|
// This file contains export wrappers for the {{.Capability.Interface}} capability.
|
||
|
|
// It is intended for use in Navidrome plugins built with TinyGo.
|
||
|
|
//
|
||
|
|
//go:build wasip1
|
||
|
|
|
||
|
|
package {{.Package}}
|
||
|
|
|
||
|
|
import (
|
||
|
|
"github.com/navidrome/navidrome/plugins/pdk/go/pdk"
|
||
|
|
)
|
||
|
|
|
||
|
|
{{- /* Generate type alias definitions */ -}}
|
||
|
|
{{- range .Capability.TypeAliases}}
|
||
|
|
|
||
|
|
{{- if .Doc}}
|
||
|
|
{{formatDoc .Doc}}
|
||
|
|
{{- end}}
|
||
|
|
type {{.Name}} {{.Type}}
|
||
|
|
{{- end}}
|
||
|
|
|
||
|
|
{{- /* Generate const definitions */ -}}
|
||
|
|
{{- range .Capability.Consts}}
|
||
|
|
{{- if .Values}}
|
||
|
|
|
||
|
|
const (
|
||
|
|
{{- $type := .Type}}
|
||
|
|
{{- range $i, $v := .Values}}
|
||
|
|
{{- if $v.Doc}}
|
||
|
|
{{formatDoc $v.Doc | indent 1}}
|
||
|
|
{{- end}}
|
||
|
|
{{- if $type}}
|
||
|
|
{{$v.Name}} {{$type}} = {{$v.Value}}
|
||
|
|
{{- else}}
|
||
|
|
{{$v.Name}} = {{$v.Value}}
|
||
|
|
{{- end}}
|
||
|
|
{{- end}}
|
||
|
|
)
|
||
|
|
{{- end}}
|
||
|
|
{{- end}}
|
||
|
|
|
||
|
|
{{- /* Generate Error() methods for string type aliases with const values (implements error interface) */ -}}
|
||
|
|
{{- $consts := .Capability.Consts}}
|
||
|
|
{{- range .Capability.TypeAliases}}
|
||
|
|
{{- if eq .Type "string"}}
|
||
|
|
{{- $typeName := .Name}}
|
||
|
|
{{- range $consts}}
|
||
|
|
{{- if eq .Type $typeName}}
|
||
|
|
|
||
|
|
// Error implements the error interface for {{$typeName}}.
|
||
|
|
func (e {{$typeName}}) Error() string { return string(e) }
|
||
|
|
{{- end}}
|
||
|
|
{{- end}}
|
||
|
|
{{- end}}
|
||
|
|
{{- end}}
|
||
|
|
|
||
|
|
{{- /* Generate struct definitions */ -}}
|
||
|
|
{{- range .Capability.Structs}}
|
||
|
|
|
||
|
|
{{- if .Doc}}
|
||
|
|
{{formatDoc .Doc}}
|
||
|
|
{{- else}}
|
||
|
|
// {{.Name}} represents the {{.Name}} data structure.
|
||
|
|
{{- end}}
|
||
|
|
type {{.Name}} struct {
|
||
|
|
{{- range .Fields}}
|
||
|
|
{{- if .Doc}}
|
||
|
|
{{formatDoc .Doc | indent 1}}
|
||
|
|
{{- end}}
|
||
|
|
{{.Name}} {{.Type}} `json:"{{.JSONTag}}{{if .OmitEmpty}},omitempty{{end}}"`
|
||
|
|
{{- end}}
|
||
|
|
}
|
||
|
|
{{- end}}
|
||
|
|
|
||
|
|
{{- /* Generate main interface based on required flag */ -}}
|
||
|
|
{{if .Capability.Required}}
|
||
|
|
|
||
|
|
// {{agentName .Capability}} requires all methods to be implemented.
|
||
|
|
{{- if .Capability.Doc}}
|
||
|
|
{{formatDoc .Capability.Doc}}
|
||
|
|
{{- end}}
|
||
|
|
type {{agentName .Capability}} interface {
|
||
|
|
{{- range .Capability.Methods}}
|
||
|
|
// {{.Name}}{{if .Doc}} - {{.Doc}}{{end}}
|
||
|
|
{{- if and .HasInput .HasOutput}}
|
||
|
|
{{.Name}}({{.Input.Type}}) ({{.Output.Type}}, error)
|
||
|
|
{{- else if .HasInput}}
|
||
|
|
{{.Name}}({{.Input.Type}}) error
|
||
|
|
{{- else if .HasOutput}}
|
||
|
|
{{.Name}}() ({{.Output.Type}}, error)
|
||
|
|
{{- else}}
|
||
|
|
{{.Name}}() error
|
||
|
|
{{- end}}
|
||
|
|
{{- end}}
|
||
|
|
}
|
||
|
|
{{- else}}
|
||
|
|
|
||
|
|
// {{agentName .Capability}} is the marker interface for {{.Package}} plugins.
|
||
|
|
// Implement one or more of the provider interfaces below.
|
||
|
|
{{- if .Capability.Doc}}
|
||
|
|
{{formatDoc .Capability.Doc}}
|
||
|
|
{{- end}}
|
||
|
|
type {{agentName .Capability}} interface{}
|
||
|
|
{{- end}}
|
||
|
|
|
||
|
|
{{- /* Generate optional provider interfaces for non-required capabilities */ -}}
|
||
|
|
{{- if not .Capability.Required}}
|
||
|
|
{{- range .Capability.Methods}}
|
||
|
|
|
||
|
|
// {{providerInterface .}} provides the {{.Name}} function.
|
||
|
|
type {{providerInterface .}} interface {
|
||
|
|
{{- if and .HasInput .HasOutput}}
|
||
|
|
{{.Name}}({{.Input.Type}}) ({{.Output.Type}}, error)
|
||
|
|
{{- else if .HasInput}}
|
||
|
|
{{.Name}}({{.Input.Type}}) error
|
||
|
|
{{- else if .HasOutput}}
|
||
|
|
{{.Name}}() ({{.Output.Type}}, error)
|
||
|
|
{{- else}}
|
||
|
|
{{.Name}}() error
|
||
|
|
{{- end}}
|
||
|
|
}
|
||
|
|
{{- end}}
|
||
|
|
{{- end}}
|
||
|
|
|
||
|
|
{{- /* Generate implementation function holders */ -}}
|
||
|
|
|
||
|
|
// Internal implementation holders
|
||
|
|
var (
|
||
|
|
{{- range .Capability.Methods}}
|
||
|
|
{{- if and .HasInput .HasOutput}}
|
||
|
|
{{implVar .}} func({{.Input.Type}}) ({{.Output.Type}}, error)
|
||
|
|
{{- else if .HasInput}}
|
||
|
|
{{implVar .}} func({{.Input.Type}}) error
|
||
|
|
{{- else if .HasOutput}}
|
||
|
|
{{implVar .}} func() ({{.Output.Type}}, error)
|
||
|
|
{{- else}}
|
||
|
|
{{implVar .}} func() error
|
||
|
|
{{- end}}
|
||
|
|
{{- end}}
|
||
|
|
)
|
||
|
|
|
||
|
|
// Register registers a {{.Package}} implementation.
|
||
|
|
{{- if .Capability.Required}}
|
||
|
|
// All methods are required.
|
||
|
|
func Register(impl {{agentName .Capability}}) {
|
||
|
|
{{- range .Capability.Methods}}
|
||
|
|
{{implVar .}} = impl.{{.Name}}
|
||
|
|
{{- end}}
|
||
|
|
}
|
||
|
|
{{- else}}
|
||
|
|
// The implementation is checked for optional provider interfaces.
|
||
|
|
func Register(impl {{agentName .Capability}}) {
|
||
|
|
{{- range .Capability.Methods}}
|
||
|
|
if p, ok := impl.({{providerInterface .}}); ok {
|
||
|
|
{{implVar .}} = p.{{.Name}}
|
||
|
|
}
|
||
|
|
{{- end}}
|
||
|
|
}
|
||
|
|
{{- end}}
|
||
|
|
|
||
|
|
// NotImplementedCode is the standard return code for unimplemented functions.
|
||
|
|
// The host recognizes this and skips the plugin gracefully.
|
||
|
|
const NotImplementedCode int32 = -2
|
||
|
|
|
||
|
|
{{- /* Generate export wrappers */ -}}
|
||
|
|
{{range .Capability.Methods}}
|
||
|
|
|
||
|
|
//go:wasmexport {{.ExportName}}
|
||
|
|
func {{exportFunc .}}() int32 {
|
||
|
|
if {{implVar .}} == nil {
|
||
|
|
// Return standard code - host will skip this plugin gracefully
|
||
|
|
return NotImplementedCode
|
||
|
|
}
|
||
|
|
{{- if .HasInput}}
|
||
|
|
|
||
|
|
var input {{.Input.Type}}
|
||
|
|
if err := pdk.InputJSON(&input); err != nil {
|
||
|
|
pdk.SetError(err)
|
||
|
|
return -1
|
||
|
|
}
|
||
|
|
{{- end}}
|
||
|
|
{{- if and .HasInput .HasOutput}}
|
||
|
|
|
||
|
|
output, err := {{implVar .}}(input)
|
||
|
|
if err != nil {
|
||
|
|
pdk.SetError(err)
|
||
|
|
return -1
|
||
|
|
}
|
||
|
|
|
||
|
|
if err := pdk.OutputJSON(output); err != nil {
|
||
|
|
pdk.SetError(err)
|
||
|
|
return -1
|
||
|
|
}
|
||
|
|
{{- else if .HasInput}}
|
||
|
|
|
||
|
|
if err := {{implVar .}}(input); err != nil {
|
||
|
|
pdk.SetError(err)
|
||
|
|
return -1
|
||
|
|
}
|
||
|
|
{{- else if .HasOutput}}
|
||
|
|
|
||
|
|
output, err := {{implVar .}}()
|
||
|
|
if err != nil {
|
||
|
|
pdk.SetError(err)
|
||
|
|
return -1
|
||
|
|
}
|
||
|
|
|
||
|
|
if err := pdk.OutputJSON(output); err != nil {
|
||
|
|
pdk.SetError(err)
|
||
|
|
return -1
|
||
|
|
}
|
||
|
|
{{- else}}
|
||
|
|
|
||
|
|
if err := {{implVar .}}(); err != nil {
|
||
|
|
pdk.SetError(err)
|
||
|
|
return -1
|
||
|
|
}
|
||
|
|
{{- end}}
|
||
|
|
|
||
|
|
return 0
|
||
|
|
}
|
||
|
|
{{- end}}
|