1use crate::{ClientOptions, Transport, TransportFactory};
7use std::sync::Arc;
8
9#[cfg(feature = "httpdate")]
10mod ratelimit;
11#[cfg(any(feature = "curl", feature = "ureq"))]
12mod thread;
13#[cfg(feature = "reqwest")]
14mod tokio_thread;
15
16#[cfg(feature = "reqwest")]
17mod reqwest;
18#[cfg(feature = "reqwest")]
19pub use self::reqwest::ReqwestHttpTransport;
20
21#[cfg(all(target_os = "espidf", feature = "embedded-svc-http"))]
22mod embedded_svc_http;
23#[cfg(all(target_os = "espidf", feature = "embedded-svc-http"))]
24pub use self::embedded_svc_http::EmbeddedSVCHttpTransport;
25
26#[cfg(feature = "curl")]
27mod curl;
28#[cfg(feature = "curl")]
29pub use self::curl::CurlHttpTransport;
30
31#[cfg(feature = "ureq")]
32mod ureq;
33#[cfg(feature = "ureq")]
34pub use self::ureq::UreqHttpTransport;
35
36#[cfg(feature = "reqwest")]
37type DefaultTransport = ReqwestHttpTransport;
38
39#[cfg(all(
40 feature = "curl",
41 not(all(target_os = "espidf", feature = "embedded-svc-http")),
42 not(feature = "reqwest"),
43 not(feature = "ureq")
44))]
45type DefaultTransport = CurlHttpTransport;
46
47#[cfg(all(
48 feature = "ureq",
49 not(all(target_os = "espidf", feature = "embedded-svc-http")),
50 not(feature = "reqwest"),
51 not(feature = "curl"),
52))]
53type DefaultTransport = UreqHttpTransport;
54
55#[cfg(all(
56 target_os = "espidf",
57 feature = "embedded-svc-http",
58 not(feature = "reqwest"),
59 not(feature = "curl"),
60 not(feature = "ureq")
61))]
62type DefaultTransport = EmbeddedSVCHttpTransport;
63
64#[cfg(any(
66 all(target_os = "espidf", feature = "embedded-svc-http"),
67 feature = "reqwest",
68 feature = "curl",
69 feature = "ureq"
70))]
71pub type HttpTransport = DefaultTransport;
72
73#[derive(Clone)]
79pub struct DefaultTransportFactory;
80
81impl TransportFactory for DefaultTransportFactory {
82 fn create_transport(&self, options: &ClientOptions) -> Arc<dyn Transport> {
83 #[cfg(any(
84 all(target_os = "espidf", feature = "embedded-svc-http"),
85 feature = "reqwest",
86 feature = "curl",
87 feature = "ureq"
88 ))]
89 {
90 Arc::new(HttpTransport::new(options))
91 }
92 #[cfg(not(any(
93 all(target_os = "espidf", feature = "embedded-svc-http"),
94 feature = "reqwest",
95 feature = "curl",
96 feature = "ureq"
97 )))]
98 {
99 let _ = options;
100 panic!("sentry crate was compiled without transport")
101 }
102 }
103}