1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
use std::error;
use std::fmt;

#[derive(Debug, Clone)]
pub struct ResponseContent<T> {
    pub status: reqwest::StatusCode,
    pub content: String,
    pub entity: Option<T>,
}

#[derive(Debug)]
pub enum Error<T> {
    Reqwest(reqwest::Error),
    Serde(serde_json::Error),
    Io(std::io::Error),
    ResponseError(ResponseContent<T>),
}

impl <T> fmt::Display for Error<T> {
    fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
        let (module, e) = match self {
            Error::Reqwest(e) => ("reqwest", e.to_string()),
            Error::Serde(e) => ("serde", e.to_string()),
            Error::Io(e) => ("IO", e.to_string()),
            Error::ResponseError(e) => ("response", format!("status code {}", e.status)),
        };
        write!(f, "error in {}: {}", module, e)
    }
}

impl <T: fmt::Debug> error::Error for Error<T> {
    fn source(&self) -> Option<&(dyn error::Error + 'static)> {
        Some(match self {
            Error::Reqwest(e) => e,
            Error::Serde(e) => e,
            Error::Io(e) => e,
            Error::ResponseError(_) => return None,
        })
    }
}

impl <T> From<reqwest::Error> for Error<T> {
    fn from(e: reqwest::Error) -> Self {
        Error::Reqwest(e)
    }
}

impl <T> From<serde_json::Error> for Error<T> {
    fn from(e: serde_json::Error) -> Self {
        Error::Serde(e)
    }
}

impl <T> From<std::io::Error> for Error<T> {
    fn from(e: std::io::Error) -> Self {
        Error::Io(e)
    }
}

pub fn urlencode<T: AsRef<str>>(s: T) -> String {
    ::url::form_urlencoded::byte_serialize(s.as_ref().as_bytes()).collect()
}

pub mod acl_api;
pub mod acl_entry_api;
pub mod apex_redirect_api;
pub mod automation_tokens_api;
pub mod backend_api;
pub mod billing_api;
pub mod billing_address_api;
pub mod cache_settings_api;
pub mod condition_api;
pub mod contact_api;
pub mod customer_api;
pub mod dictionary_api;
pub mod dictionary_info_api;
pub mod dictionary_item_api;
pub mod diff_api;
pub mod director_api;
pub mod director_backend_api;
pub mod domain_api;
pub mod domain_ownerships_api;
pub mod enabled_products_api;
pub mod gzip_api;
pub mod header_api;
pub mod healthcheck_api;
pub mod http3_api;
pub mod iam_permissions_api;
pub mod iam_roles_api;
pub mod iam_service_groups_api;
pub mod iam_user_groups_api;
pub mod invitations_api;
pub mod kv_store_api;
pub mod kv_store_item_api;
pub mod logging_azureblob_api;
pub mod logging_bigquery_api;
pub mod logging_cloudfiles_api;
pub mod logging_datadog_api;
pub mod logging_digitalocean_api;
pub mod logging_elasticsearch_api;
pub mod logging_ftp_api;
pub mod logging_gcs_api;
pub mod logging_heroku_api;
pub mod logging_honeycomb_api;
pub mod logging_https_api;
pub mod logging_kafka_api;
pub mod logging_kinesis_api;
pub mod logging_logentries_api;
pub mod logging_loggly_api;
pub mod logging_logshuttle_api;
pub mod logging_newrelic_api;
pub mod logging_openstack_api;
pub mod logging_papertrail_api;
pub mod logging_pubsub_api;
pub mod logging_s3_api;
pub mod logging_scalyr_api;
pub mod logging_sftp_api;
pub mod logging_splunk_api;
pub mod logging_sumologic_api;
pub mod logging_syslog_api;
pub mod mutual_authentication_api;
pub mod package_api;
pub mod pool_api;
pub mod pop_api;
pub mod public_ip_list_api;
pub mod publish_api;
pub mod purge_api;
pub mod rate_limiter_api;
pub mod request_settings_api;
pub mod resource_api;
pub mod response_object_api;
pub mod server_api;
pub mod service_api;
pub mod service_authorizations_api;
pub mod settings_api;
pub mod snippet_api;
pub mod star_api;
pub mod stats_api;
pub mod tls_activations_api;
pub mod tls_bulk_certificates_api;
pub mod tls_certificates_api;
pub mod tls_configurations_api;
pub mod tls_domains_api;
pub mod tls_private_keys_api;
pub mod tls_subscriptions_api;
pub mod tokens_api;
pub mod user_api;
pub mod vcl_diff_api;
pub mod version_api;
pub mod waf_active_rules_api;
pub mod waf_exclusions_api;
pub mod waf_firewall_versions_api;
pub mod waf_firewalls_api;
pub mod waf_rule_revisions_api;
pub mod waf_rules_api;
pub mod waf_tags_api;

pub mod configuration;