sentry/transports/
mod.rs

1//! The provided transports.
2//!
3//! This module exposes all transports that are compiled into the sentry
4//! library.  The `reqwest`, `curl`, and `ureq` features turn on these transports.
5
6use 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/// The default http transport.
65#[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/// Creates the default HTTP transport.
74///
75/// This is the default value for `transport` on the client options.  It
76/// creates a `HttpTransport`.  If no http transport was compiled into the
77/// library it will panic on transport creation.
78#[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}