// 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 extism-pdk. use serde::{Deserialize, Serialize}; use base64::Engine as _; use base64::engine::general_purpose::STANDARD as BASE64; mod base64_bytes { use serde::{self, Deserialize, Deserializer, Serializer}; use base64::Engine as _; use base64::engine::general_purpose::STANDARD as BASE64; pub fn serialize(bytes: &Vec, serializer: S) -> Result where S: Serializer, { serializer.serialize_str(&BASE64.encode(bytes)) } pub fn deserialize<'de, D>(deserializer: D) -> Result, D::Error> where D: Deserializer<'de>, { let s = String::deserialize(deserializer)?; BASE64.decode(&s).map_err(serde::de::Error::custom) } } // Helper functions for skip_serializing_if with numeric types #[allow(dead_code)] fn is_zero_i32(value: &i32) -> bool { *value == 0 } #[allow(dead_code)] fn is_zero_u32(value: &u32) -> bool { *value == 0 } #[allow(dead_code)] fn is_zero_i64(value: &i64) -> bool { *value == 0 } #[allow(dead_code)] fn is_zero_u64(value: &u64) -> bool { *value == 0 } #[allow(dead_code)] fn is_zero_f32(value: &f32) -> bool { *value == 0.0 } #[allow(dead_code)] fn is_zero_f64(value: &f64) -> bool { *value == 0.0 } /// TaskExecuteRequest is the request provided when a task is ready to execute. #[derive(Debug, Clone, Default, Serialize, Deserialize)] #[serde(rename_all = "camelCase")] pub struct TaskExecuteRequest { /// QueueName is the name of the queue this task belongs to. #[serde(default)] pub queue_name: String, /// TaskID is the unique identifier for this task. #[serde(default)] pub task_id: String, /// Payload is the opaque data provided when the task was enqueued. #[serde(default)] #[serde(with = "base64_bytes")] pub payload: Vec, /// Attempt is the current attempt number (1-based: first attempt = 1). #[serde(default)] pub attempt: i32, } /// Error represents an error from a capability method. #[derive(Debug)] pub struct Error { pub message: String, } impl std::fmt::Display for Error { fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { write!(f, "{}", self.message) } } impl std::error::Error for Error {} impl Error { pub fn new(message: impl Into) -> Self { Self { message: message.into() } } } /// TaskExecuteProvider provides the OnTaskExecute function. pub trait TaskExecuteProvider { fn on_task_execute(&self, req: TaskExecuteRequest) -> Result; } /// Register the on_task_execute export. /// This macro generates the WASM export function for this method. #[macro_export] macro_rules! register_taskworker_task_execute { ($plugin_type:ty) => { #[extism_pdk::plugin_fn] pub fn nd_task_execute( req: extism_pdk::Json<$crate::taskworker::TaskExecuteRequest> ) -> extism_pdk::FnResult> { let plugin = <$plugin_type>::default(); let result = $crate::taskworker::TaskExecuteProvider::on_task_execute(&plugin, req.into_inner())?; Ok(extism_pdk::Json(result)) } }; }