Skip to main content

securitydept_realip/
error.rs

1use std::{net::IpAddr, path::PathBuf};
2
3use snafu::Snafu;
4
5pub type RealIpResult<T> = Result<T, RealIpError>;
6
7#[derive(Debug, Snafu)]
8#[snafu(visibility(pub))]
9pub enum RealIpError {
10    #[snafu(display("Invalid real-ip config: {message}"))]
11    Config { message: String },
12
13    #[snafu(display("Unknown provider kind `{kind}` for provider `{name}`"))]
14    UnknownProviderKind { name: String, kind: String },
15
16    #[snafu(display("No custom provider factory registered for kind `{kind}`"))]
17    MissingProviderFactory { kind: String },
18
19    #[snafu(display("Duplicate custom provider factory registration for kind `{kind}`"))]
20    DuplicateProviderFactory { kind: String },
21
22    #[snafu(display("Provider `{provider}` is missing required field `{field}`"))]
23    MissingProviderField {
24        provider: String,
25        field: &'static str,
26    },
27
28    #[snafu(display("Source `{source_name}` references unknown provider `{provider}`"))]
29    UnknownSourceProvider {
30        source_name: String,
31        provider: String,
32    },
33
34    #[snafu(display("Failed to read provider file `{:?}`: {source}", path))]
35    ReadProviderFile {
36        path: PathBuf,
37        source: std::io::Error,
38    },
39
40    #[snafu(display("Provider command `{command}` failed: {details}"))]
41    ProviderCommand { command: String, details: String },
42
43    #[snafu(display("Provider request for `{url}` failed: {source}"))]
44    ProviderHttp { url: String, source: reqwest::Error },
45
46    #[snafu(display("Failed to watch provider path `{:?}`: {details}", path))]
47    WatchProvider { path: PathBuf, details: String },
48
49    #[snafu(display("Provider `{provider}` returned no valid CIDRs"))]
50    EmptyProviderOutput { provider: String },
51
52    #[snafu(display("Provider `{provider}` has invalid CIDR or IP entry `{entry}`"))]
53    InvalidProviderEntry { provider: String, entry: String },
54
55    #[snafu(display("Provider `{provider}` failed: {details}"))]
56    ProviderLoad { provider: String, details: String },
57
58    #[snafu(display("Invalid real-ip access config: {message}"))]
59    AccessConfig { message: String },
60
61    #[snafu(display("Real-ip access denied for `{client_ip}`: {reason}"))]
62    AccessDenied { client_ip: IpAddr, reason: String },
63}