80 lines
2.3 KiB
Go
80 lines
2.3 KiB
Go
|
|
// Code generated by ndpgen. DO NOT EDIT.
|
||
|
|
//
|
||
|
|
// This file contains export wrappers for the TaskWorker capability.
|
||
|
|
// It is intended for use in Navidrome plugins built with TinyGo.
|
||
|
|
//
|
||
|
|
//go:build wasip1
|
||
|
|
|
||
|
|
package taskworker
|
||
|
|
|
||
|
|
import (
|
||
|
|
"github.com/navidrome/navidrome/plugins/pdk/go/pdk"
|
||
|
|
)
|
||
|
|
|
||
|
|
// TaskExecuteRequest is the request provided when a task is ready to execute.
|
||
|
|
type TaskExecuteRequest struct {
|
||
|
|
// QueueName is the name of the queue this task belongs to.
|
||
|
|
QueueName string `json:"queueName"`
|
||
|
|
// TaskID is the unique identifier for this task.
|
||
|
|
TaskID string `json:"taskId"`
|
||
|
|
// Payload is the opaque data provided when the task was enqueued.
|
||
|
|
Payload []byte `json:"payload"`
|
||
|
|
// Attempt is the current attempt number (1-based: first attempt = 1).
|
||
|
|
Attempt int32 `json:"attempt"`
|
||
|
|
}
|
||
|
|
|
||
|
|
// TaskWorker is the marker interface for taskworker plugins.
|
||
|
|
// Implement one or more of the provider interfaces below.
|
||
|
|
// TaskWorker provides task execution handling.
|
||
|
|
// This capability allows plugins to receive callbacks when their queued tasks
|
||
|
|
// are ready to execute. Plugins that use the taskqueue host service must
|
||
|
|
// implement this capability.
|
||
|
|
type TaskWorker interface{}
|
||
|
|
|
||
|
|
// TaskExecuteProvider provides the OnTaskExecute function.
|
||
|
|
type TaskExecuteProvider interface {
|
||
|
|
OnTaskExecute(TaskExecuteRequest) (string, error)
|
||
|
|
} // Internal implementation holders
|
||
|
|
var (
|
||
|
|
taskExecuteImpl func(TaskExecuteRequest) (string, error)
|
||
|
|
)
|
||
|
|
|
||
|
|
// Register registers a taskworker implementation.
|
||
|
|
// The implementation is checked for optional provider interfaces.
|
||
|
|
func Register(impl TaskWorker) {
|
||
|
|
if p, ok := impl.(TaskExecuteProvider); ok {
|
||
|
|
taskExecuteImpl = p.OnTaskExecute
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
// NotImplementedCode is the standard return code for unimplemented functions.
|
||
|
|
// The host recognizes this and skips the plugin gracefully.
|
||
|
|
const NotImplementedCode int32 = -2
|
||
|
|
|
||
|
|
//go:wasmexport nd_task_execute
|
||
|
|
func _NdTaskExecute() int32 {
|
||
|
|
if taskExecuteImpl == nil {
|
||
|
|
// Return standard code - host will skip this plugin gracefully
|
||
|
|
return NotImplementedCode
|
||
|
|
}
|
||
|
|
|
||
|
|
var input TaskExecuteRequest
|
||
|
|
if err := pdk.InputJSON(&input); err != nil {
|
||
|
|
pdk.SetError(err)
|
||
|
|
return -1
|
||
|
|
}
|
||
|
|
|
||
|
|
output, err := taskExecuteImpl(input)
|
||
|
|
if err != nil {
|
||
|
|
pdk.SetError(err)
|
||
|
|
return -1
|
||
|
|
}
|
||
|
|
|
||
|
|
if err := pdk.OutputJSON(output); err != nil {
|
||
|
|
pdk.SetError(err)
|
||
|
|
return -1
|
||
|
|
}
|
||
|
|
|
||
|
|
return 0
|
||
|
|
}
|