// 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}; // 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 } /// 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) -> 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(()) } }; }