Skip to main content

OnHttpRequestHookPayload

Struct OnHttpRequestHookPayload 

Source
pub struct OnHttpRequestHookPayload<'req> {
    pub router_http_request: WebRequest<DefaultError>,
    pub context: &'req PluginContext,
}

Fields§

§router_http_request: WebRequest<DefaultError>

The raw incoming HTTP request to the router It includes all the details of the request such as headers, body, etc.

Example:

use hive_router::{
   plugins::hooks::on_http_request::{OnHttpRequestHookPayload, OnHttpRequestHookResult},
};

fn on_http_request<'req>(mut payload: OnHttpRequestHookPayload<'req>) -> OnHttpRequestHookResult<'req> {
    let my_header = payload.router_http_request.headers().get("my-header");
    // do something with the header...
    payload.proceed()
}
§context: &'req PluginContext

The context object that can be used to share data across different plugin hooks for the same request. It is unique per request and is dropped after the response is sent.

Learn more about the context data sharing in the docs

Example:

use hive_router::{
    plugins::hooks::{
        on_http_request::{OnHttpRequestHookPayload, OnHttpRequestHookResult},
        on_execute::{OnExecuteStartHookPayload, OnExecuteStartHookResult}    
    },
    plugin_context::PluginContext,
    async_trait::async_trait,
};

struct ContextData {
    greetings: String
}

#[async_trait]
impl RouterPlugin for MyPlugin {
    fn on_http_request<'req>(mut payload: OnHttpRequestHookPayload<'req>) -> OnHttpRequestHookResult<'req> {
        let context_data = ContextData {
           greetings: "Hello from context!".to_string()
        };

       payload.context.insert(context_data);

       payload.proceed()
    }

    async fn on_execute<'exec>(&'exec self, payload: OnExecuteStartHookPayload<'exec>) -> OnExecuteStartHookResult<'exec> {
        let context_data = payload.context.get::<ContextData>().unwrap();
        println!("{}", context_data.greetings); // prints "Hello from context!"
        payload.proceed()
    }
}

Trait Implementations§

Source§

impl<'req> StartHookPayload<OnHttpResponseHookPayload<'req>, Response> for OnHttpRequestHookPayload<'req>

Source§

fn proceed<'exec>(self) -> StartHookResult<'exec, Self, TEndPayload, TResponse>

Continue with the regular flow of the hook This is called in most cases when you don’t short-circuit the hook with a response or an error. Read more
Source§

fn end_with_response<'exec>( self, output: TResponse, ) -> StartHookResult<'exec, Self, TEndPayload, TResponse>

End the hook execution and return a response to the client immediately, skipping the rest of the execution flow.
Source§

fn end_with_graphql_error<'exec>( self, error: GraphQLError, status_code: StatusCode, ) -> StartHookResult<'exec, Self, TEndPayload, TResponse>
where TResponse: FromGraphQLErrorToResponse,

End the hook execution with a GraphQL error, returning a response with the appropriate error format to the client immediately, skipping the rest of the execution flow. Read more
Source§

fn on_end<'exec, F>( self, f: F, ) -> StartHookResult<'exec, Self, TEndPayload, TResponse>
where F: FnOnce(TEndPayload) -> EndHookResult<TEndPayload, TResponse> + Send + 'exec,

Attach a callback to be executed at the end of the hook, allowing you to manipulate the end payload or response. This is useful when you want to execute some logic after the main execution of the hook Read more

Auto Trait Implementations§

§

impl<'req> Freeze for OnHttpRequestHookPayload<'req>

§

impl<'req> !RefUnwindSafe for OnHttpRequestHookPayload<'req>

§

impl<'req> !Send for OnHttpRequestHookPayload<'req>

§

impl<'req> !Sync for OnHttpRequestHookPayload<'req>

§

impl<'req> Unpin for OnHttpRequestHookPayload<'req>

§

impl<'req> UnsafeUnpin for OnHttpRequestHookPayload<'req>

§

impl<'req> !UnwindSafe for OnHttpRequestHookPayload<'req>

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