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 PluginContextThe 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>
impl<'req> StartHookPayload<OnHttpResponseHookPayload<'req>, Response> for OnHttpRequestHookPayload<'req>
Source§fn proceed<'exec>(self) -> StartHookResult<'exec, Self, TEndPayload, TResponse>
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>
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,
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>
fn on_end<'exec, F>( self, f: F, ) -> StartHookResult<'exec, Self, TEndPayload, TResponse>
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> 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
Mutably borrows from an owned value. Read more
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>
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 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>
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 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>
Wrap the input message
T in a tonic::RequestSource§impl<Source, Target> OctetsInto<Target> for Sourcewhere
Target: OctetsFrom<Source>,
impl<Source, Target> OctetsInto<Target> for Sourcewhere
Target: OctetsFrom<Source>,
type Error = <Target as OctetsFrom<Source>>::Error
Source§fn try_octets_into(
self,
) -> Result<Target, <Source as OctetsInto<Target>>::Error>
fn try_octets_into( self, ) -> Result<Target, <Source as OctetsInto<Target>>::Error>
Performs the conversion.
Source§fn octets_into(self) -> Target
fn octets_into(self) -> Target
Performs an infallible conversion.