// Code generated by ndpgen. DO NOT EDIT.//// This file contains client wrappers for the {{.Service.Name}} host service.// It is intended for use in Navidrome plugins built with TinyGo.////go:build wasip1package {{.Package}}import ("encoding/json"{{- if .Service.HasErrors}}"errors"{{- end}}{{- if .Service.ImportsSharedTypes}}"github.com/navidrome/navidrome/plugins/pdk/go/types"{{- end}}"github.com/navidrome/navidrome/plugins/pdk/go/pdk"){{- /* Generate deprecated shared-type aliases */ -}}{{- range .Service.SharedAliases}}{{- if .Doc}}{{formatDoc .Doc}}{{- end}}type {{.Name}} = {{.Target}}{{- end}}{{- /* Generate struct definitions */ -}}{{- range .Service.Structs}}// {{.Name}} represents the {{.Name}} data structure.{{- if .Doc}}{{formatDoc .Doc}}{{- end}}type {{.Name}} struct {{{- range .Fields}}{{.Name}} {{.Type}} `json:"{{.JSONTag}}"`{{- end}}}{{- end}}{{- /* Generate wasmimport declarations for each method */ -}}{{range .Service.Methods}}// {{exportName .}} is the host function provided by Navidrome.////go:wasmimport extism:host/user {{exportName .}}func {{exportName .}}(uint64) uint64{{- end}}{{- /* Generate request/response types for all methods (private) */ -}}{{range .Service.Methods}}{{- if .HasParams}}type {{requestType .}} struct {{{- range .Params}}{{title .Name}} {{.Type}} `json:"{{.JSONName}}"`{{- end}}}{{- end}}{{- if not .IsErrorOnly}}type {{responseType .}} struct {{{- range .Returns}}{{title .Name}} {{.Type}} `json:"{{.JSONName}},omitempty"`{{- end}}{{- if .HasError}}Error string `json:"error,omitempty"`{{- end}}}{{- end}}{{- end}}{{- /* Generate wrapper functions */ -}}{{range .Service.Methods}}// {{$.Service.Name}}{{.Name}} calls the {{exportName .}} host function.{{- if .Doc}}{{formatDoc .Doc}}{{- end}}func {{$.Service.Name}}{{.Name}}({{range $i, $p := .Params}}{{if $i}}, {{end}}{{$p.Name}} {{$p.Type}}{{end}}) {{.ReturnSignature}} {{{- if .HasParams}}// Marshal request to JSONreq := {{requestType .}}{{{- range .Params}}{{title .Name}}: {{.Name}},{{- end}}}reqBytes, err := json.Marshal(req)if err != nil {return {{if .HasReturns}}{{.ZeroValues}}{{end}}{{if and .HasReturns .HasError}}, {{end}}{{if .HasError}}err{{end}}}reqMem := pdk.AllocateBytes(reqBytes)defer reqMem.Free(){{- else}}// No parameters - allocate empty JSON objectreqMem := pdk.AllocateBytes([]byte("{}"))defer reqMem.Free(){{- end}}// Call the host functionresponsePtr := {{exportName .}}(reqMem.Offset())// Read the response from memoryresponseMem := pdk.FindMemory(responsePtr)responseBytes := responseMem.ReadBytes(){{- if .IsErrorOnly}}// Parse error-only responsevar response struct {Error string `json:"error,omitempty"`}if err := json.Unmarshal(responseBytes, &response); err != nil {return err}if response.Error != "" {return errors.New(response.Error)}return nil{{- else}}// Parse the responsevar response {{responseType .}}if err := json.Unmarshal(responseBytes, &response); err != nil {return {{if .HasReturns}}{{.ZeroValues}}{{end}}{{if and .HasReturns .HasError}}, {{end}}{{if .HasError}}err{{end}}}{{- if .HasError}}// Convert Error field to Go errorif response.Error != "" {return {{if .HasReturns}}{{.ZeroValues}}, {{end}}errors.New(response.Error)}{{- end}}return {{range $i, $r := .Returns}}{{if $i}}, {{end}}response.{{title $r.Name}}{{end}}{{if and .HasReturns .HasError}}, {{end}}{{if .HasError}}nil{{end}}{{- end}}}{{- end}}