Skip to main content

agent_fetch/
error.rs

1use std::net::IpAddr;
2
3#[derive(Debug, thiserror::Error)]
4pub enum FetchError {
5    #[error("private IP blocked: host {host} resolved to {resolved_ip}")]
6    PrivateIpBlocked { host: String, resolved_ip: IpAddr },
7
8    #[error("domain not in allowlist: {0}")]
9    DomainNotAllowed(String),
10
11    #[error("domain is blocked: {0}")]
12    DomainBlocked(String),
13
14    #[error("scheme not allowed: {0}")]
15    SchemeNotAllowed(String),
16
17    #[error("method not allowed: {0}")]
18    MethodNotAllowed(String),
19
20    #[error("DNS resolution failed: {0}")]
21    DnsResolutionFailed(String),
22
23    #[error("request body too large: {size} bytes exceeds limit of {limit} bytes")]
24    RequestBodyTooLarge { size: usize, limit: usize },
25
26    #[error("response body too large: {size} bytes exceeds limit of {limit} bytes")]
27    ResponseBodyTooLarge { size: usize, limit: usize },
28
29    #[error("too many redirects (limit: {limit})")]
30    TooManyRedirects { limit: u8 },
31
32    #[error("rate limit exceeded")]
33    RateLimitExceeded,
34
35    #[error("connection timeout")]
36    ConnectionTimeout,
37
38    #[error("request timeout")]
39    RequestTimeout,
40
41    #[error("invalid URL: {0}")]
42    InvalidUrl(String),
43
44    #[error("HTTP error: {0}")]
45    HttpError(String),
46
47    #[error("redirect to private IP: {url} resolved to {resolved_ip}")]
48    RedirectToPrivateIp { url: String, resolved_ip: IpAddr },
49}