Skip to main content

alpaca_http/
observer.rs

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}