Skip to main content

OnPluginInitPayload

Struct OnPluginInitPayload 

Source
pub struct OnPluginInitPayload<'a, TRouterPlugin: RouterPlugin> { /* private fields */ }

Implementations§

Source§

impl<'a, TRouterPlugin> OnPluginInitPayload<'a, TRouterPlugin>
where TRouterPlugin: RouterPlugin,

Source

pub fn new( config: &'a Value, bg_tasks_manager: &'a mut BackgroundTasksManager, ) -> Self

Source

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...
}
Source

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...
    }
}
Source

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...
}
Source

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)
}
Source

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()
    }
}
Source

pub fn error<TError>(err: TError) -> OnPluginInitResult<TRouterPlugin>
where TError: Error + Into<BoxError>,

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> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T> FutureExt for T

Source§

fn with_context(self, otel_cx: Context) -> WithContext<Self>

Attaches the provided Context to this type, returning a WithContext wrapper. Read more
Source§

fn with_current_context(self) -> WithContext<Self>

Attaches the current Context to this type, returning a WithContext wrapper. Read more
Source§

impl<T> Instrument for T

Source§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided Span, returning an Instrumented wrapper. Read more
Source§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts 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 more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where F: FnOnce(&Self) -> bool,

Converts 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 more
Source§

impl<T> IntoRequest<T> for T

Source§

fn into_request(self) -> Request<T>

Wrap the input message T in a tonic::Request
Source§

impl<L> LayerExt<L> for L

Source§

fn named_layer<S>(&self, service: S) -> Layered<<L as Layer<S>>::Service, S>
where L: Layer<S>,

Applies the layer to a service and wraps it in Layered.
Source§

impl<Source, Target> OctetsInto<Target> for Source
where Target: OctetsFrom<Source>,

Source§

type Error = <Target as OctetsFrom<Source>>::Error

Source§

fn try_octets_into( self, ) -> Result<Target, <Source as OctetsInto<Target>>::Error>

Performs the conversion.
Source§

fn octets_into(self) -> Target
where Self::Error: Into<Infallible>,

Performs an infallible conversion.
Source§

impl<T> PolicyExt for T
where T: ?Sized,

Source§

fn and<P, B, E>(self, other: P) -> And<T, P>
where T: Policy<B, E>, P: Policy<B, E>,

Create a new Policy that returns Action::Follow only if self and other return Action::Follow. Read more
Source§

fn or<P, B, E>(self, other: P) -> Or<T, P>
where T: Policy<B, E>, P: Policy<B, E>,

Create a new Policy that returns Action::Follow if either self or other returns Action::Follow. Read more
Source§

impl<T> Same for T

Source§

type Output = T

Should always be Self
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
Source§

impl<V, T> VZip<V> for T
where V: MultiLane<T>,

Source§

fn vzip(self) -> V

Source§

impl<T> WithSubscriber for T

Source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a WithDispatch wrapper. Read more
Source§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a WithDispatch wrapper. Read more