1use std::time::Duration;
2
3use reqwest::{Method, StatusCode};
4
5use crate::meta::{ErrorMeta, ResponseMeta};
6
7pub trait TransportObserver: Send + Sync {
8 fn on_request_start(&self, _event: &RequestStart) {}
9 fn on_retry(&self, _event: &RetryEvent) {}
10 fn on_response(&self, _event: &ResponseEvent) {}
11 fn on_error(&self, _event: &ErrorEvent) {}
12}
13
14#[derive(Debug, Default)]
15pub struct NoopObserver;
16
17impl TransportObserver for NoopObserver {}
18
19#[derive(Clone, Debug, PartialEq, Eq)]
20pub struct RequestStart {
21 pub operation: Option<String>,
22 pub method: Method,
23 pub url: String,
24}
25
26#[derive(Clone, Debug, PartialEq, Eq)]
27pub struct RetryEvent {
28 pub operation: Option<String>,
29 pub method: Method,
30 pub url: String,
31 pub attempt: u32,
32 pub status: Option<StatusCode>,
33 pub wait: Duration,
34}
35
36#[derive(Clone, Debug, PartialEq, Eq)]
37pub struct ResponseEvent {
38 pub meta: ResponseMeta,
39}
40
41#[derive(Clone, Debug, PartialEq, Eq)]
42pub struct ErrorEvent {
43 pub meta: Option<ErrorMeta>,
44}