Skip to main content

leyline/
lib.rs

1#![doc = include_str!("../README.md")]
2
3#[cfg(doctest)]
4#[doc = include_str!("../../../docs/api.md")]
5pub struct ApiMap;
6
7#[cfg(doctest)]
8pub mod guide {
9    #[doc = include_str!("../../../docs/README.md")]
10    pub struct Index;
11    #[doc = include_str!("../../../docs/guide/quick-start.md")]
12    pub struct QuickStart;
13    #[doc = include_str!("../../../docs/guide/sessions.md")]
14    pub struct Sessions;
15    #[doc = include_str!("../../../docs/guide/requests.md")]
16    pub struct Requests;
17    #[doc = include_str!("../../../docs/guide/responses.md")]
18    pub struct Responses;
19    #[doc = include_str!("../../../docs/guide/streaming.md")]
20    pub struct Streaming;
21    #[doc = include_str!("../../../docs/guide/retries-and-timeouts.md")]
22    pub struct Retries;
23    #[doc = include_str!("../../../docs/guide/proxies.md")]
24    pub struct Proxies;
25    #[doc = include_str!("../../../docs/guide/cookies.md")]
26    pub struct Cookies;
27    #[doc = include_str!("../../../docs/guide/websocket.md")]
28    pub struct WebSocket;
29    #[doc = include_str!("../../../docs/guide/http3.md")]
30    pub struct Http3;
31    #[doc = include_str!("../../../docs/guide/tls-trust.md")]
32    pub struct TlsTrust;
33    #[doc = include_str!("../../../docs/guide/network.md")]
34    pub struct Network;
35    #[doc = include_str!("../../../docs/guide/fingerprints.md")]
36    pub struct Fingerprints;
37    #[doc = include_str!("../../../docs/guide/features-and-targets.md")]
38    pub struct Features;
39    #[doc = include_str!("../../../docs/guide/profiles.md")]
40    pub struct Profiles;
41    #[doc = include_str!("../../../docs/guide/choosing-a-profile.md")]
42    pub struct ChoosingAProfile;
43    #[doc = include_str!("../../../docs/guide/redirects.md")]
44    pub struct Redirects;
45    #[doc = include_str!("../../../docs/guide/errors.md")]
46    pub struct Errors;
47    #[doc = include_str!("../../../docs/guide/logging.md")]
48    pub struct Logging;
49    #[doc = include_str!("../../../docs/guide/platforms.md")]
50    pub struct Platforms;
51}
52
53macro_rules! bench_pub {
54    ($(#[$meta:meta])* fn $($rest:tt)*) => {
55        #[cfg(feature = "bench-internals")]
56        $(#[$meta])*
57        pub fn $($rest)*
58
59        #[cfg(not(feature = "bench-internals"))]
60        $(#[$meta])*
61        pub(crate) fn $($rest)*
62    };
63}
64
65pub mod audit;
66pub mod cookie;
67pub mod profile;
68pub mod tls;
69pub mod trace;
70
71pub(crate) mod core;
72#[cfg(feature = "bench-internals")]
73#[doc(hidden)]
74pub mod h2;
75#[cfg(not(feature = "bench-internals"))]
76pub(crate) mod h2;
77pub(crate) mod header_str;
78pub(crate) mod iana;
79#[cfg(feature = "bench-internals")]
80#[doc(hidden)]
81pub mod pool;
82#[cfg(not(feature = "bench-internals"))]
83pub(crate) mod pool;
84#[cfg(feature = "bench-internals")]
85#[doc(hidden)]
86pub mod fuzz {
87    pub use crate::cookie::parse::parse_cookie_date;
88    pub use crate::pool::h1::parse::{parse_h1_head, read_chunked_body};
89    pub use crate::tls::proxy::http::validate_connect_response;
90
91    pub fn parse_set_cookie(header: &str, request_url: &str) -> Option<crate::cookie::Cookie> {
92        let parsed = url::Url::parse(request_url).ok()?;
93        crate::cookie::parse::parse_set_cookie(header, &parsed)
94    }
95
96    pub fn extension_ids(tls: &crate::profile::TlsProfile) -> Vec<u16> {
97        crate::profile::permutation::extension_ids(tls)
98    }
99}
100#[cfg(feature = "http3")]
101pub(crate) mod quic;
102pub(crate) mod tcp;
103mod util;
104
105pub use http;
106pub use url::Url;
107
108#[cfg(feature = "tower")]
109pub use crate::core::LeylineService;
110#[cfg(feature = "websocket")]
111pub use crate::core::WebSocketBuilder;
112pub use crate::core::{
113    Body, BodyStream, CompressionConfig, ContentEncoding, DigestAuth, DnsConfig, Error, FetchSite,
114    HttpVersion, Identity, IntoParamPair, IntoUrl, Kind, NoProxy, PoolConfig, ProtocolPolicy,
115    ProxyConfig, ProxyRule, ProxyUrl, RedirectAction, RedirectAttempt, RedirectPolicy,
116    RequestBuilder, Response, ResponseTiming, Result, RetryPolicy, RetryTrigger, Session,
117    SessionBuilder, SessionIdentity, SocketConfig, TimeoutConfig, WebSocketConfig,
118};
119pub use crate::pool::{PoolStats, TlsInfo};
120
121#[cfg(feature = "multipart")]
122pub mod multipart {
123    pub use crate::core::multipart::{Form, Part};
124}
125
126use crate::profile::ProfileRegistry;
127pub use crate::profile::anchor::HeaderAnchor;
128pub use crate::profile::brand::ChromiumBrand;
129pub use crate::profile::browser::{Browser, Family};
130pub use crate::profile::platform::Platform;
131pub use crate::profile::preset::Preset;
132pub use crate::profile::types::BrowserProfile;
133
134pub use crate::tcp::TcpProfile;
135
136pub use crate::h2::{ErrorCode, H2Error};
137
138#[cfg(all(feature = "http3", feature = "bench-internals"))]
139#[doc(hidden)]
140pub use crate::quic::H3Config;
141
142#[cfg(feature = "websocket")]
143pub use crate::core::{CloseFrame, WsConnection, WsMessage, WsSink, WsStream};
144
145#[cfg(any(leyline_unstable_bssl, feature = "bench-internals"))]
146pub use crate::tls::TlsContext;
147pub use crate::tls::builder::TlsMinVersion;
148pub use crate::tls::error::TlsError;
149pub use crate::tls::trust::TlsTrustConfig;
150
151impl Browser {
152    pub fn profile(self) -> &'static BrowserProfile {
153        ProfileRegistry::global().get_browser(self).expect(
154            "built-in profile missing - registry integrity check in tests would have caught this",
155        )
156    }
157
158    pub(crate) fn shared_profile(self) -> std::sync::Arc<BrowserProfile> {
159        ProfileRegistry::global().shared(self).expect(
160            "built-in profile missing - registry integrity check in tests would have caught this",
161        )
162    }
163}