65 lines
2.2 KiB
Rust
65 lines
2.2 KiB
Rust
|
|
// Code generated by ndpgen. DO NOT EDIT.
|
||
|
|
//
|
||
|
|
// This file contains export wrappers for the SchedulerCallback capability.
|
||
|
|
// It is intended for use in Navidrome plugins built with extism-pdk.
|
||
|
|
|
||
|
|
use serde::{Deserialize, Serialize};
|
||
|
|
/// SchedulerCallbackRequest is the request provided when a scheduled task fires.
|
||
|
|
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
|
||
|
|
#[serde(rename_all = "camelCase")]
|
||
|
|
pub struct SchedulerCallbackRequest {
|
||
|
|
/// ScheduleID is the unique identifier for this scheduled task.
|
||
|
|
/// This is either the ID provided when scheduling, or an auto-generated UUID if none was specified.
|
||
|
|
#[serde(default)]
|
||
|
|
pub schedule_id: String,
|
||
|
|
/// Payload is the payload data that was provided when the task was scheduled.
|
||
|
|
/// Can be used to pass context or parameters to the callback handler.
|
||
|
|
#[serde(default)]
|
||
|
|
pub payload: String,
|
||
|
|
/// IsRecurring is true if this is a recurring schedule (created via ScheduleRecurring),
|
||
|
|
/// false if it's a one-time schedule (created via ScheduleOneTime).
|
||
|
|
#[serde(default)]
|
||
|
|
pub is_recurring: bool,
|
||
|
|
}
|
||
|
|
|
||
|
|
/// 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() }
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
/// CallbackProvider provides the OnCallback function.
|
||
|
|
pub trait CallbackProvider {
|
||
|
|
fn on_callback(&self, req: SchedulerCallbackRequest) -> Result<(), Error>;
|
||
|
|
}
|
||
|
|
|
||
|
|
/// Register the on_callback export.
|
||
|
|
/// This macro generates the WASM export function for this method.
|
||
|
|
#[macro_export]
|
||
|
|
macro_rules! register_scheduler_callback {
|
||
|
|
($plugin_type:ty) => {
|
||
|
|
#[extism_pdk::plugin_fn]
|
||
|
|
pub fn nd_scheduler_callback(
|
||
|
|
req: extism_pdk::Json<$crate::scheduler::SchedulerCallbackRequest>
|
||
|
|
) -> extism_pdk::FnResult<()> {
|
||
|
|
let plugin = <$plugin_type>::default();
|
||
|
|
$crate::scheduler::CallbackProvider::on_callback(&plugin, req.into_inner())?;
|
||
|
|
Ok(())
|
||
|
|
}
|
||
|
|
};
|
||
|
|
}
|