// Code generated by ndpgen. DO NOT EDIT.package {{.Package}}import ("context""encoding/json"extism "github.com/extism/go-sdk"){{- /* Generate request/response types for all methods */ -}}{{range .Service.Methods}}{{- if .HasParams}}// {{requestType .}} is the request type for {{$.Service.Name}}.{{.Name}}.type {{requestType .}} struct {{{- range .Params}}{{title .Name}} {{.Type}} `json:"{{.JSONName}}"`{{- end}}}{{- end}}// {{responseType .}} is the response type for {{$.Service.Name}}.{{.Name}}.type {{responseType .}} struct {{{- range .Returns}}{{title .Name}} {{.Type}} `json:"{{.JSONName}},omitempty"`{{- end}}{{- if .HasError}}Error string `json:"error,omitempty"`{{- end}}}{{end}}// Register{{.Service.Name}}HostFunctions registers {{.Service.Name}} service host functions.// The returned host functions should be added to the plugin's configuration.func Register{{.Service.Name}}HostFunctions(service {{.Service.Interface}}) []extism.HostFunction {return []extism.HostFunction{{{- range .Service.Methods}}new{{$.Service.Name}}{{.Name}}HostFunction(service),{{- end}}}}{{range .Service.Methods}}func new{{$.Service.Name}}{{.Name}}HostFunction(service {{$.Service.Interface}}) extism.HostFunction {return extism.NewHostFunctionWithStack("{{exportName .}}",func(ctx context.Context, p *extism.CurrentPlugin, stack []uint64) {{{- if .HasParams}}// Read JSON request from plugin memoryreqBytes, err := p.ReadBytes(stack[0])if err != nil {{{$.Service.Name | lower}}WriteError(p, stack, err)return}var req {{requestType .}}if err := json.Unmarshal(reqBytes, &req); err != nil {{{$.Service.Name | lower}}WriteError(p, stack, err)return}{{- end}}// Call the service method{{- if .HasReturns}}{{- if .HasError}}{{range $i, $r := .Returns}}{{if $i}}, {{end}}{{lower $r.Name}}{{end}}, svcErr := service.{{.Name}}(ctx{{range .Params}}, req.{{title .Name}}{{end}})if svcErr != nil {{{$.Service.Name | lower}}WriteError(p, stack, svcErr)return}{{- else}}{{range $i, $r := .Returns}}{{if $i}}, {{end}}{{lower $r.Name}}{{end}} := service.{{.Name}}(ctx{{range .Params}}, req.{{title .Name}}{{end}}){{- end}}// Write JSON response to plugin memoryresp := {{responseType .}}{{{- range .Returns}}{{title .Name}}: {{lower .Name}},{{- end}}}{{$.Service.Name | lower}}WriteResponse(p, stack, resp){{- else if .HasError}}if svcErr := service.{{.Name}}(ctx{{range .Params}}, req.{{title .Name}}{{end}}); svcErr != nil {{{$.Service.Name | lower}}WriteError(p, stack, svcErr)return}// Write JSON response to plugin memoryresp := {{responseType .}}{}{{$.Service.Name | lower}}WriteResponse(p, stack, resp){{- else}}service.{{.Name}}(ctx{{range .Params}}, req.{{title .Name}}{{end}})// Write JSON response to plugin memoryresp := {{responseType .}}{}{{$.Service.Name | lower}}WriteResponse(p, stack, resp){{- end}}},[]extism.ValueType{extism.ValueTypePTR},[]extism.ValueType{extism.ValueTypePTR},)}{{end}}// {{.Service.Name | lower}}WriteResponse writes a JSON response to plugin memory.func {{.Service.Name | lower}}WriteResponse(p *extism.CurrentPlugin, stack []uint64, resp any) {respBytes, err := json.Marshal(resp)if err != nil {{{.Service.Name | lower}}WriteError(p, stack, err)return}respPtr, err := p.WriteBytes(respBytes)if err != nil {stack[0] = 0return}stack[0] = respPtr}// {{.Service.Name | lower}}WriteError writes an error response to plugin memory.func {{.Service.Name | lower}}WriteError(p *extism.CurrentPlugin, stack []uint64, err error) {errResp := struct {Error string `json:"error"`}{Error: err.Error()}respBytes, _ := json.Marshal(errResp)respPtr, _ := p.WriteBytes(respBytes)stack[0] = respPtr}