1pub use anyhow::Error as AnyhowError;
2pub use std::error;
3pub use std::fmt;
4
5#[derive(Debug, Clone)]
6pub struct ResponseContent<T> {
7 pub status: reqwest::StatusCode,
8 pub content: String,
9 pub entity: Option<T>,
10}
11
12#[derive(Debug)]
13pub enum Error<T> {
14 Reqwest(reqwest::Error),
15 Middleware(AnyhowError),
16 Serde(serde_json::Error),
17 Io(std::io::Error),
18 ResponseError(ResponseContent<T>),
19}
20
21impl<T> fmt::Display for Error<T> {
22 fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
23 let (module, e) = match self {
24 Error::Reqwest(e) => ("reqwest", e.to_string()),
25 Error::Middleware(e) => ("middleware", e.to_string()),
26 Error::Serde(e) => ("serde", e.to_string()),
27 Error::Io(e) => ("IO", e.to_string()),
28 Error::ResponseError(e) => ("response", format!("status code {}", e.status)),
29 };
30 write!(f, "error in {module}: {e}")
31 }
32}
33
34impl<T: fmt::Debug> error::Error for Error<T> {
35 fn source(&self) -> Option<&(dyn error::Error + 'static)> {
36 Some(match self {
37 Error::Reqwest(e) => e,
38 Error::Middleware(e) => e.as_ref(),
39 Error::Serde(e) => e,
40 Error::Io(e) => e,
41 Error::ResponseError(_) => return None,
42 })
43 }
44}
45
46impl<T> From<reqwest::Error> for Error<T> {
47 fn from(e: reqwest::Error) -> Self {
48 Error::Reqwest(e)
49 }
50}
51
52impl<T> From<serde_json::Error> for Error<T> {
53 fn from(e: serde_json::Error) -> Self {
54 Error::Serde(e)
55 }
56}
57
58impl<T> From<std::io::Error> for Error<T> {
59 fn from(e: std::io::Error) -> Self {
60 Error::Io(e)
61 }
62}
63
64impl<T> From<anyhow::Error> for Error<T> {
65 fn from(e: anyhow::Error) -> Self {
66 Error::Middleware(e)
67 }
68}
69
70#[derive(Debug, Clone, PartialEq, Eq)]
71pub enum ContentType {
72 Json,
73 Text,
74 Unsupported(String),
75}
76
77impl From<&str> for ContentType {
78 fn from(s: &str) -> Self {
79 if s.contains("application/json") {
80 ContentType::Json
81 } else if s.contains("text/plain") {
82 ContentType::Text
83 } else {
84 ContentType::Unsupported(s.to_string())
85 }
86 }
87}
88
89pub fn urlencode<T: AsRef<str>>(s: T) -> String {
90 ::url::form_urlencoded::byte_serialize(s.as_ref().as_bytes()).collect()
91}
92
93pub fn parse_deep_object(prefix: &str, value: &serde_json::Value) -> Vec<(String, String)> {
94 if let serde_json::Value::Object(object) = value {
95 let mut params = vec![];
96
97 for (key, value) in object {
98 match value {
99 serde_json::Value::Object(_) => {
100 params.append(&mut parse_deep_object(&format!("{prefix}[{key}]"), value))
101 }
102 serde_json::Value::Array(array) => {
103 for (i, value) in array.iter().enumerate() {
104 params.append(&mut parse_deep_object(
105 &format!("{prefix}[{key}][{i}]"),
106 value,
107 ));
108 }
109 }
110 serde_json::Value::String(s) => {
111 params.push((format!("{prefix}[{key}]"), s.clone()))
112 }
113 _ => params.push((format!("{prefix}[{key}]"), value.to_string())),
114 }
115 }
116
117 return params;
118 }
119
120 unimplemented!("Only objects are supported with style=deepObject")
121}
122
123#[derive(Debug, Clone)]
125pub struct FileData {
126 pub name: String,
127 pub data: Vec<u8>,
128 pub mime_type: String,
129}
130
131pub mod active_sessions_api;
132pub use self::active_sessions_api::{GetSessionsError, GetUsersSessionsError, RevokeSessionError};
133pub mod backup_codes_api;
134pub use self::backup_codes_api::CreateBackupCodesError;
135pub mod client_api;
136pub use self::client_api::{
137 DeleteClientSessionsError, GetClientError, HandshakeClientError, PostClientError,
138 PutClientError,
139};
140pub mod configuration;
141pub use self::configuration::Configuration as ApiConfiguration;
142pub mod default_api;
143pub use self::default_api::{
144 ClearSiteDataError, GetAccountPortalError, GetDevBrowserInitError, GetProxyHealthError,
145 LinkClientError, PostDevBrowserInitSetCookieError, SyncClientError,
146};
147pub mod dev_browser_api;
148pub use self::dev_browser_api::CreateDevBrowserError;
149pub mod domains_api;
150pub use self::domains_api::{
151 AttemptOrganizationDomainVerificationError, CreateOrganizationDomainError,
152 DeleteOrganizationDomainError, GetOrganizationDomainError, ListOrganizationDomainsError,
153 PrepareOrganizationDomainVerificationError, UpdateOrganizationDomainEnrollmentModeError,
154};
155pub mod email_addresses_api;
156pub use self::email_addresses_api::{
157 CreateEmailAddressesError, DeleteEmailAddressError, GetEmailAddressError,
158 GetEmailAddressesError, SendVerificationEmailError, VerifyEmailAddressError,
159};
160pub mod environment_api;
161pub use self::environment_api::{GetEnvironmentError, UpdateEnvironmentError};
162pub mod external_accounts_api;
163pub use self::external_accounts_api::{
164 DeleteExternalAccountError, PostOAuthAccountsError, ReauthorizeExternalAccountError,
165 RevokeExternalAccountTokensError,
166};
167pub mod health_api;
168pub use self::health_api::GetHealthError;
169pub mod invitations_api;
170pub use self::invitations_api::{
171 BulkCreateOrganizationInvitationsError, CreateOrganizationInvitationsError,
172 GetAllPendingOrganizationInvitationsError, GetOrganizationInvitationsError,
173 RevokePendingOrganizationInvitationError,
174};
175pub mod members_api;
176pub use self::members_api::{
177 CreateOrganizationMembershipError, ListOrganizationMembershipsError,
178 RemoveOrganizationMemberError, UpdateOrganizationMembershipError,
179};
180pub mod membership_requests_api;
181pub use self::membership_requests_api::{
182 AcceptOrganizationMembershipRequestError, ListOrganizationMembershipRequestsError,
183 RejectOrganizationMembershipRequestError,
184};
185pub mod o_auth2_callbacks_api;
186pub use self::o_auth2_callbacks_api::{GetOauthCallbackError, PostOauthCallbackError};
187pub mod o_auth2_identify_provider_api;
188pub use self::o_auth2_identify_provider_api::{
189 GetOAuthConsentError, GetOAuthTokenError, GetOAuthTokenInfoError, GetOAuthUserInfoError,
190 GetOAuthUserInfoPostError, RequestOAuthAuthorizeError, RequestOAuthAuthorizePostError,
191 RevokeOAuthTokenError,
192};
193pub mod organization_api;
194pub use self::organization_api::{
195 CreateOrganizationError, DeleteOrganizationError, DeleteOrganizationLogoError,
196 GetOrganizationError, UpdateOrganizationError, UpdateOrganizationLogoError,
197};
198pub mod organizations_memberships_api;
199pub use self::organizations_memberships_api::{
200 AcceptOrganizationInvitationError, AcceptOrganizationSuggestionError,
201 DeleteOrganizationMembershipsError, GetOrganizationMembershipsError,
202 GetOrganizationSuggestionsError, GetUsersOrganizationInvitationsError,
203};
204pub mod passkeys_api;
205pub use self::passkeys_api::{
206 AttemptPasskeyVerificationError, DeletePasskeyError, PatchPasskeyError, PostPasskeyError,
207 ReadPasskeyError,
208};
209pub mod phone_numbers_api;
210pub use self::phone_numbers_api::{
211 DeletePhoneNumberError, GetPhoneNumbersError, PostPhoneNumbersError, ReadPhoneNumberError,
212 SendVerificationSmsError, UpdatePhoneNumberError, VerifyPhoneNumberError,
213};
214pub mod redirect_api;
215pub use self::redirect_api::RedirectToUrlError;
216pub mod roles_api;
217pub use self::roles_api::ListOrganizationRolesError;
218pub mod saml_api;
219pub use self::saml_api::{AcsError, SamlMetadataError};
220pub mod sessions_api;
221pub use self::sessions_api::{
222 AttemptSessionReverificationFirstFactorError, AttemptSessionReverificationSecondFactorError,
223 CreateSessionTokenError, CreateSessionTokenWithTemplateError, EndSessionError, GetSessionError,
224 PrepareSessionReverificationFirstFactorError, PrepareSessionReverificationSecondFactorError,
225 RemoveClientSessionsAndRetainCookieError, RemoveSessionError, StartSessionReverificationError,
226 TouchSessionError,
227};
228pub mod sign_ins_api;
229pub use self::sign_ins_api::{
230 AcceptTicketError, AttemptSignInFactorOneError, AttemptSignInFactorTwoError, CreateSignInError,
231 GetSignInError, PrepareSignInFactorOneError, PrepareSignInFactorTwoError, ResetPasswordError,
232 VerifyError,
233};
234pub mod sign_ups_api;
235pub use self::sign_ups_api::{
236 AttemptSignUpsVerificationError, CreateSignUpsError, GetSignUpsError,
237 PrepareSignUpsVerificationError, UpdateSignUpsError,
238};
239pub mod totp_api;
240pub use self::totp_api::{DeleteTotpError, PostTotpError, VerifyTotpError};
241pub mod user_api;
242pub use self::user_api::{
243 ChangePasswordError, CreateServiceTokenError, DeleteProfileImageError, DeleteUserError,
244 GetUserError, PatchUserError, RemovePasswordError, UpdateProfileImageError,
245};
246pub mod waitlist_api;
247pub use self::waitlist_api::JoinWaitlistError;
248pub mod web3_wallets_api;
249pub use self::web3_wallets_api::{
250 AttemptWeb3WalletVerificationError, DeleteWeb3WalletError, GetWeb3WalletsError,
251 PostWeb3WalletsError, PrepareWeb3WalletVerificationError, ReadWeb3WalletError,
252};
253pub mod well_known_api;
254pub use self::well_known_api::{
255 GetAndroidAssetLinksError, GetAppleAppSiteAssociationError, GetJwksError,
256 GetOAuth2AuthorizationServerMetadataError, GetOpenIdConfigurationError,
257};