use crate::request::{Request, StreamRequest};
use crate::response::JsonResponse;
use sword_core::Interceptor;
pub use axum::middleware::Next;
use axum::response::Response as AxumResponse;
use std::future::Future;
pub type WebInterceptorResult = Result<AxumResponse, JsonResponse>;
pub trait OnRequest: Interceptor {
fn on_request(&self, req: Request) -> impl Future<Output = WebInterceptorResult>;
}
pub trait OnRequestWithConfig<C>: Interceptor {
fn on_request(&self, config: C, req: Request) -> impl Future<Output = WebInterceptorResult>;
}
pub trait OnRequestStream: Interceptor {
fn on_request(&self, req: StreamRequest) -> impl Future<Output = WebInterceptorResult>;
}
pub trait OnRequestStreamWithConfig<C>: Interceptor {
fn on_request(
&self,
config: C,
req: StreamRequest,
) -> impl Future<Output = WebInterceptorResult>;
}