1use std::path::PathBuf;
2
3use reqwest::StatusCode;
4
5pub type Result<T> = std::result::Result<T, Error>;
6
7#[derive(Debug, thiserror::Error)]
8pub enum Error {
9 #[error("API request failed with {}: {}", status_code, message)]
10 Api {
11 status_code: StatusCode,
12 message: String,
13 },
14
15 #[error("Invalid endpoint: '{}'", endpoint)]
16 BadEndpoint { endpoint: url::Url },
17
18 #[error("Bad token: {}", token)]
19 BadToken { token: String },
20
21 #[error("File does not exist : {}", path.to_string_lossy())]
22 FileDoesNotExist { path: PathBuf },
23
24 #[error("Expected <owner>/<name> or a source id, got: {}", identifier)]
25 BadSourceIdentifier { identifier: String },
26
27 #[error("Expected <owner>/<name> or a dataset id, got: {}", identifier)]
28 BadDatasetIdentifier { identifier: String },
29
30 #[error("Expected <owner>/<name>: {}", identifier)]
31 BadIntegrationIdentifier { identifier: String },
32
33 #[error("Expected <owner>/<dataset>/<stream>: {}", identifier)]
34 BadStreamName { identifier: String },
35
36 #[error("Expected u64: {}", version)]
37 BadStreamModelVersion { version: String },
38
39 #[error(
40 "Expected a user id (usernames and emails are not supported), got: {}",
41 identifier
42 )]
43 BadUserIdentifier { identifier: String },
44
45 #[error("Expected a valid project name, got: {}", identifier)]
46 BadProjectIdentifier { identifier: String },
47
48 #[error("Unknown project permission: {}", permission)]
49 BadProjectPermission { permission: String },
50
51 #[error("Unknown global permission: {}", permission)]
52 BadGlobalPermission { permission: String },
53
54 #[error("Expected <owner>/<name> or a bucket id, got: {}", identifier)]
55 BadBucketIdentifier { identifier: String },
56
57 #[error("Expected <owner>/<name>, got: {}", name)]
58 BadBucketName { name: String },
59
60 #[error("Expected a valid bucket type, got: {}", bucket_type)]
61 BadBucketType { bucket_type: String },
62
63 #[error("Expected a valid quota kind, got: {}", tenant_quota_kind)]
64 BadTenantQuotaKind { tenant_quota_kind: String },
65
66 #[error("Could not parse JSON response.")]
67 BadJsonResponse(#[source] reqwest::Error),
68
69 #[error(
70 "Status code {} inconsistent with response payload: {}",
71 status_code,
72 message
73 )]
74 BadProtocol {
75 status_code: StatusCode,
76 message: String,
77 },
78
79 #[error("Failed to initialise the HTTP client")]
80 BuildHttpClient(#[source] reqwest::Error),
81
82 #[error("HTTP request error: {}", message)]
83 ReqwestError {
84 message: String,
85 source: reqwest::Error,
86 },
87
88 #[error("An unknown error has occurred: {}", message)]
89 Unknown {
90 message: String,
91 source: Box<dyn std::error::Error + Send + Sync + 'static>,
92 },
93}