use std::sync::Arc;
use async_trait::async_trait;
use reqwest::{Request, Response};
use crate::error::SdkError;
#[async_trait]
pub trait Interceptor: Send + Sync + std::fmt::Debug {
async fn on_request(&self, request: Request) -> Result<Request, SdkError> {
Ok(request)
}
async fn on_response(&self, _response: &Response) -> Result<(), SdkError> {
Ok(())
}
}
pub type SharedInterceptor = Arc<dyn Interceptor>;
#[derive(Debug, Default, Clone, Copy)]
pub struct TracingInterceptor;
#[async_trait]
impl Interceptor for TracingInterceptor {
async fn on_request(&self, request: Request) -> Result<Request, SdkError> {
tracing::debug!(
method = %request.method(),
url = %request.url(),
"openapp-sdk: dispatching request"
);
Ok(request)
}
async fn on_response(&self, response: &Response) -> Result<(), SdkError> {
tracing::debug!(
status = response.status().as_u16(),
url = %response.url(),
"openapp-sdk: received response"
);
Ok(())
}
}