pub struct OnPluginInitPayload<'a, TRouterPlugin: RouterPlugin> { /* private fields */ }Implementations§
Source§impl<'a, TRouterPlugin> OnPluginInitPayload<'a, TRouterPlugin>where
TRouterPlugin: RouterPlugin,
impl<'a, TRouterPlugin> OnPluginInitPayload<'a, TRouterPlugin>where
TRouterPlugin: RouterPlugin,
pub fn new( config: &'a Value, bg_tasks_manager: &'a mut BackgroundTasksManager, ) -> Self
Sourcepub fn config(&self) -> Result<TRouterPlugin::Config, Box<dyn Error>>
pub fn config(&self) -> Result<TRouterPlugin::Config, Box<dyn Error>>
Parse the plugin config into the expected config struct for the plugin. The plugin can choose when and if to call this method.
Refer to the docs for more details
Example:
fn on_plugin_init(mut payload: OnPluginInitPayload<Self>) -> OnPluginInitResult<Self> {
let config = payload.config()?;
// use config to initialize plugin...
}Sourcepub fn register_background_task<T>(&mut self, task: T)where
T: BackgroundTask + 'static,
pub fn register_background_task<T>(&mut self, task: T)where
T: BackgroundTask + 'static,
Register a background task to be run by the router.
The registered task struct should implement the BackgroundTask trait.
Refer to the docs for more details
Example:
struct MyBackgroundTask {
// fields for the task...
}
#[async_trait]
impl BackgroundTask for MyBackgroundTask {
fn id(&self) -> &str {
"my_background_task"
}
async fn run(&self, token: CancellationToken) {
loop {
if token.is_cancelled() {
break;
}
// do background work...
}
}
}
impl RouterPlugin for MyPlugin {
// ...
fn on_plugin_init(mut payload: OnPluginInitPayload<Self>) -> OnPluginInitResult<Self> {
payload.register_background_task(MyBackgroundTask {
// initialize task fields...
});
// initialize plugin...
}
}Sourcepub fn disable_plugin(&self) -> OnPluginInitResult<TRouterPlugin>
pub fn disable_plugin(&self) -> OnPluginInitResult<TRouterPlugin>
Returning this will disable the plugin and it won’t be initialized. This can be used if the plugin determines during initialization that it shouldn’t run (e.g. due to missing configuration or environment variables).
Example:
fn on_plugin_init(payload: OnPluginInitPayload<Self>) -> OnPluginInitResult {
if some_condition {
return payload.disable_plugin();
}
// continue with initialization...
}Sourcepub fn initialize_plugin(
&self,
plugin: TRouterPlugin,
) -> OnPluginInitResult<TRouterPlugin>
pub fn initialize_plugin( &self, plugin: TRouterPlugin, ) -> OnPluginInitResult<TRouterPlugin>
Returning this will initialize the plugin with the provided instance. Example:
fn on_plugin_init(mut payload: OnPluginInitPayload<Self>) -> OnPluginInitResult<Self> {
let config = payload.config()?;
let plugin_instance = Self {
// initialize plugin fields from config...
};
payload.initialize_plugin(plugin_instance)
}Sourcepub fn initialize_plugin_with_defaults(
&self,
) -> OnPluginInitResult<TRouterPlugin>where
TRouterPlugin: Default,
pub fn initialize_plugin_with_defaults(
&self,
) -> OnPluginInitResult<TRouterPlugin>where
TRouterPlugin: Default,
If the plugin struct implements Default, this method can be used to initialize the plugin with default values.
Example:
#[derive(Default)]
struct MyPlugin {
values: Vec<String>,
}
impl RouterPlugin for MyPlugin {
// ...
fn on_plugin_init(payload: OnPluginInitPayload<Self>) -> OnPluginInitResult<Self> {
payload.initialize_plugin_with_defaults()
}
}Sourcepub fn error<TError>(err: TError) -> OnPluginInitResult<TRouterPlugin>
pub fn error<TError>(err: TError) -> OnPluginInitResult<TRouterPlugin>
Returning an error from this method will cause the router to fail initialization and the error will be logged. This can be used if the plugin encounters an unrecoverable error during initialization. Example:
fn on_plugin_init(payload: OnPluginInitPayload<Self>) -> OnPluginInitResult<Self> {
if let Err(e) = do_some_initialization() {
return payload.error(e);
}
// continue with initialization...
}Auto Trait Implementations§
impl<'a, TRouterPlugin> Freeze for OnPluginInitPayload<'a, TRouterPlugin>
impl<'a, TRouterPlugin> !RefUnwindSafe for OnPluginInitPayload<'a, TRouterPlugin>
impl<'a, TRouterPlugin> Send for OnPluginInitPayload<'a, TRouterPlugin>
impl<'a, TRouterPlugin> Sync for OnPluginInitPayload<'a, TRouterPlugin>
impl<'a, TRouterPlugin> Unpin for OnPluginInitPayload<'a, TRouterPlugin>where
TRouterPlugin: Unpin,
impl<'a, TRouterPlugin> UnsafeUnpin for OnPluginInitPayload<'a, TRouterPlugin>
impl<'a, TRouterPlugin> !UnwindSafe for OnPluginInitPayload<'a, TRouterPlugin>
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Source§impl<T> FutureExt for T
impl<T> FutureExt for T
Source§fn with_context(self, otel_cx: Context) -> WithContext<Self>
fn with_context(self, otel_cx: Context) -> WithContext<Self>
Source§fn with_current_context(self) -> WithContext<Self>
fn with_current_context(self) -> WithContext<Self>
Source§impl<T> Instrument for T
impl<T> Instrument for T
Source§fn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
Source§fn in_current_span(self) -> Instrumented<Self>
fn in_current_span(self) -> Instrumented<Self>
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self>
fn into_either(self, into_left: bool) -> Either<Self, Self>
self into a Left variant of Either<Self, Self>
if into_left is true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
self into a Left variant of Either<Self, Self>
if into_left(&self) returns true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§impl<T> IntoRequest<T> for T
impl<T> IntoRequest<T> for T
Source§fn into_request(self) -> Request<T>
fn into_request(self) -> Request<T>
T in a tonic::Request