#![doc = include_str!("../README.md")]
#[cfg(doctest)]
#[doc = include_str!("../../../docs/api.md")]
pub struct ApiMap;
#[cfg(doctest)]
pub mod guide {
#[doc = include_str!("../../../docs/README.md")]
pub struct Index;
#[doc = include_str!("../../../docs/guide/quick-start.md")]
pub struct QuickStart;
#[doc = include_str!("../../../docs/guide/sessions.md")]
pub struct Sessions;
#[doc = include_str!("../../../docs/guide/requests.md")]
pub struct Requests;
#[doc = include_str!("../../../docs/guide/responses.md")]
pub struct Responses;
#[doc = include_str!("../../../docs/guide/streaming.md")]
pub struct Streaming;
#[doc = include_str!("../../../docs/guide/retries-and-timeouts.md")]
pub struct Retries;
#[doc = include_str!("../../../docs/guide/proxies.md")]
pub struct Proxies;
#[doc = include_str!("../../../docs/guide/cookies.md")]
pub struct Cookies;
#[doc = include_str!("../../../docs/guide/websocket.md")]
pub struct WebSocket;
#[doc = include_str!("../../../docs/guide/http3.md")]
pub struct Http3;
#[doc = include_str!("../../../docs/guide/tls-trust.md")]
pub struct TlsTrust;
#[doc = include_str!("../../../docs/guide/network.md")]
pub struct Network;
#[doc = include_str!("../../../docs/guide/fingerprints.md")]
pub struct Fingerprints;
#[doc = include_str!("../../../docs/guide/features-and-targets.md")]
pub struct Features;
#[doc = include_str!("../../../docs/guide/profiles.md")]
pub struct Profiles;
#[doc = include_str!("../../../docs/guide/choosing-a-profile.md")]
pub struct ChoosingAProfile;
#[doc = include_str!("../../../docs/guide/redirects.md")]
pub struct Redirects;
#[doc = include_str!("../../../docs/guide/errors.md")]
pub struct Errors;
#[doc = include_str!("../../../docs/guide/logging.md")]
pub struct Logging;
#[doc = include_str!("../../../docs/guide/platforms.md")]
pub struct Platforms;
#[doc = include_str!("../../../docs/guide/cancellation.md")]
pub struct Cancellation;
#[doc = include_str!("../../../docs/guide/testing.md")]
pub struct Testing;
#[doc = include_str!("../../../docs/guide/service-integration.md")]
pub struct ServiceIntegration;
#[doc = include_str!("../../../docs/guide/crawling.md")]
pub struct Crawling;
#[doc = include_str!("../../../docs/guide/accounts.md")]
pub struct Accounts;
#[doc = include_str!("../../../docs/guide/api-clients.md")]
pub struct ApiClients;
}
macro_rules! bench_pub {
($(#[$meta:meta])* fn $($rest:tt)*) => {
#[cfg(feature = "bench-internals")]
$(#[$meta])*
pub fn $($rest)*
#[cfg(not(feature = "bench-internals"))]
$(#[$meta])*
pub(crate) fn $($rest)*
};
}
pub mod audit;
pub mod cookie;
pub mod profile;
pub mod tls;
pub mod trace;
pub(crate) mod core;
#[cfg(feature = "bench-internals")]
#[doc(hidden)]
pub mod h2;
#[cfg(not(feature = "bench-internals"))]
pub(crate) mod h2;
pub(crate) mod header_str;
pub(crate) mod iana;
#[cfg(feature = "bench-internals")]
#[doc(hidden)]
pub mod pool;
#[cfg(not(feature = "bench-internals"))]
pub(crate) mod pool;
#[cfg(feature = "bench-internals")]
#[doc(hidden)]
pub mod fuzz {
pub use crate::cookie::parse::parse_cookie_date;
pub use crate::pool::h1::parse::{parse_h1_head, read_chunked_body};
pub use crate::tls::proxy::http::validate_connect_response;
pub fn parse_set_cookie(header: &str, request_url: &str) -> Option<crate::cookie::Cookie> {
let parsed = url::Url::parse(request_url).ok()?;
crate::cookie::parse::parse_set_cookie(header, &parsed)
}
pub fn extension_ids(tls: &crate::profile::TlsProfile) -> Vec<u16> {
tls.extension_ids()
}
pub fn parse_links(header: &str, base: &str) -> Vec<crate::Link> {
url::Url::parse(base)
.map(|base| crate::core::parse_links(header, &base))
.unwrap_or_default()
}
}
#[cfg(feature = "html")]
pub mod html;
#[cfg(feature = "http3")]
pub(crate) mod quic;
pub(crate) mod tcp;
#[cfg(feature = "test-util")]
pub mod testing;
mod util;
pub use http;
pub use url::Url;
#[cfg(feature = "tower")]
pub use crate::core::LeylineService;
#[cfg(feature = "websocket")]
pub use crate::core::WebSocketBuilder;
pub use crate::core::{
BlockKind, BlockRules, BlockSignal, Body, BodyStream, CompressionConfig, ContentEncoding,
Device, DeviceAutosave, DeviceAutosaveOptions, DigestAuth, DnsConfig, Error, ErrorCategory,
FetchSite, HostLimits, HostStats, HttpVersion, Identity, IntoParamPair, IntoUrl, Kind, Link,
NoProxy, Pages, PoolConfig, PrefixRead, ProtocolPolicy, ProxyConfig, ProxyHealth, ProxyPool,
ProxyRule, ProxyUrl, Purpose, RedirectAction, RedirectAttempt, RedirectPolicy, RelayBody,
RequestBuilder, Response, ResponseTiming, Result, RetryPolicy, RetryTrigger, Robots,
RobotsSource, Session, SessionBuilder, SessionIdentity, SessionState, SocketConfig, StopReason,
Tab, TimeoutConfig, WaitFormat, WebSocketConfig, relay_headers,
};
#[cfg(feature = "html")]
pub use crate::core::{Crawl, CrawlPage, CrawlStats, Respect, Scope, SkipReason};
pub use crate::pool::{PoolStats, TlsInfo};
pub use crate::util::redact as redact_url;
pub async fn get(url: impl IntoUrl) -> Result<Response> {
Session::builder().build()?.get(url).send().await
}
#[cfg(feature = "multipart")]
pub mod multipart {
pub use crate::core::multipart::{Form, Part};
}
use crate::profile::ProfileRegistry;
pub use crate::profile::anchor::HeaderAnchor;
pub use crate::profile::brand::ChromiumBrand;
pub use crate::profile::browser::{Browser, Family};
pub use crate::profile::platform::Platform;
pub use crate::profile::preset::Preset;
pub use crate::profile::types::BrowserProfile;
pub use crate::tcp::TcpProfile;
pub use crate::h2::{ErrorCode, H2Error};
#[cfg(all(feature = "http3", feature = "bench-internals"))]
#[doc(hidden)]
pub use crate::quic::H3Config;
#[cfg(feature = "websocket")]
pub use crate::core::{CloseFrame, WsConnection, WsMessage, WsSink, WsStream};
#[cfg(any(leyline_unstable_bssl, feature = "bench-internals"))]
pub use crate::tls::TlsContext;
pub use crate::tls::builder::TlsMinVersion;
pub use crate::tls::error::{ProxyReply, TlsError};
pub use crate::tls::trust::TlsTrustConfig;
impl Browser {
pub fn profile(self) -> &'static BrowserProfile {
ProfileRegistry::global().get_browser(self).expect(
"built-in profile missing - registry integrity check in tests would have caught this",
)
}
pub(crate) fn shared_profile(self) -> std::sync::Arc<BrowserProfile> {
ProfileRegistry::global().shared(self).expect(
"built-in profile missing - registry integrity check in tests would have caught this",
)
}
}