103 lines
3.3 KiB
Rust
103 lines
3.3 KiB
Rust
|
|
// 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<S>(bytes: &Vec<u8>, serializer: S) -> Result<S::Ok, S::Error>
|
||
|
|
where
|
||
|
|
S: Serializer,
|
||
|
|
{
|
||
|
|
serializer.serialize_str(&BASE64.encode(bytes))
|
||
|
|
}
|
||
|
|
|
||
|
|
pub fn deserialize<'de, D>(deserializer: D) -> Result<Vec<u8>, 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<u8>,
|
||
|
|
/// 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<String>) -> Self {
|
||
|
|
Self { message: message.into() }
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
/// TaskExecuteProvider provides the OnTaskExecute function.
|
||
|
|
pub trait TaskExecuteProvider {
|
||
|
|
fn on_task_execute(&self, req: TaskExecuteRequest) -> Result<String, Error>;
|
||
|
|
}
|
||
|
|
|
||
|
|
/// 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<extism_pdk::Json<String>> {
|
||
|
|
let plugin = <$plugin_type>::default();
|
||
|
|
let result = $crate::taskworker::TaskExecuteProvider::on_task_execute(&plugin, req.into_inner())?;
|
||
|
|
Ok(extism_pdk::Json(result))
|
||
|
|
}
|
||
|
|
};
|
||
|
|
}
|