Skip to content

Commit d3223be

Browse files
author
Dongri Jin
committed
Add custom error
1 parent 95bef4a commit d3223be

File tree

5 files changed

+53
-32
lines changed

5 files changed

+53
-32
lines changed

Cargo.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
[package]
22
name = "openai-api-rs"
3-
version = "0.1.3"
3+
version = "0.1.4"
44
edition = "2021"
55
authors = ["Dongri Jin <[email protected]>"]
66
license = "MIT"

README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
Cargo.toml
55
```toml
66
[dependencies]
7-
openai-api-rs = "0.1.3"
7+
openai-api-rs = "0.1.4"
88
```
99

1010
## Example:

src/v1/api.rs

Lines changed: 35 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ use crate::v1::chat_completion::{ChatCompletionRequest, ChatCompletionResponse};
22
use crate::v1::completion::{CompletionRequest, CompletionResponse};
33
use crate::v1::edit::{EditRequest, EditResponse};
44
use crate::v1::embedding::{EmbeddingRequest, EmbeddingResponse};
5+
use crate::v1::error::APIError;
56
use crate::v1::file::{
67
FileDeleteRequest, FileDeleteResponse, FileListResponse, FileRetrieveContentRequest,
78
FileRetrieveContentResponse, FileRetrieveRequest, FileRetrieveResponse, FileUploadRequest,
@@ -12,7 +13,6 @@ use crate::v1::image::{
1213
ImageVariationRequest, ImageVariationResponse,
1314
};
1415
use reqwest::Response;
15-
use std::io::Error;
1616

1717
const APU_URL_V1: &str = "https://api.openai.com/v1";
1818

@@ -29,7 +29,7 @@ impl Client {
2929
&self,
3030
path: &str,
3131
params: &T,
32-
) -> Result<Response, Error> {
32+
) -> Result<Response, APIError> {
3333
let client = reqwest::Client::new();
3434
let url = format!("{APU_URL_V1}{path}");
3535
let res = client
@@ -45,16 +45,15 @@ impl Client {
4545
match res {
4646
Ok(res) => match res.status().is_success() {
4747
true => Ok(res),
48-
false => Err(Error::new(
49-
std::io::ErrorKind::Other,
50-
format!("{}: {}", res.status(), res.text().await.unwrap()),
51-
)),
48+
false => Err(APIError {
49+
message: format!("{}: {}", res.status(), res.text().await.unwrap()),
50+
}),
5251
},
5352
Err(e) => Err(self.new_error(e)),
5453
}
5554
}
5655

57-
pub async fn get(&self, path: &str) -> Result<Response, Error> {
56+
pub async fn get(&self, path: &str) -> Result<Response, APIError> {
5857
let client = reqwest::Client::new();
5958
let url = format!("{APU_URL_V1}{path}");
6059
let res = client
@@ -69,16 +68,15 @@ impl Client {
6968
match res {
7069
Ok(res) => match res.status().is_success() {
7170
true => Ok(res),
72-
false => Err(Error::new(
73-
std::io::ErrorKind::Other,
74-
format!("{}: {}", res.status(), res.text().await.unwrap()),
75-
)),
71+
false => Err(APIError {
72+
message: format!("{}: {}", res.status(), res.text().await.unwrap()),
73+
}),
7674
},
7775
Err(e) => Err(self.new_error(e)),
7876
}
7977
}
8078

81-
pub async fn delete(&self, path: &str) -> Result<Response, Error> {
79+
pub async fn delete(&self, path: &str) -> Result<Response, APIError> {
8280
let client = reqwest::Client::new();
8381
let url = format!("{APU_URL_V1}{path}");
8482
let res = client
@@ -93,16 +91,15 @@ impl Client {
9391
match res {
9492
Ok(res) => match res.status().is_success() {
9593
true => Ok(res),
96-
false => Err(Error::new(
97-
std::io::ErrorKind::Other,
98-
format!("{}: {}", res.status(), res.text().await.unwrap()),
99-
)),
94+
false => Err(APIError {
95+
message: format!("{}: {}", res.status(), res.text().await.unwrap()),
96+
}),
10097
},
10198
Err(e) => Err(self.new_error(e)),
10299
}
103100
}
104101

105-
pub async fn completion(&self, req: CompletionRequest) -> Result<CompletionResponse, Error> {
102+
pub async fn completion(&self, req: CompletionRequest) -> Result<CompletionResponse, APIError> {
106103
let res = self.post("/completions", &req).await?;
107104
let r = res.json::<CompletionResponse>().await;
108105
match r {
@@ -111,7 +108,7 @@ impl Client {
111108
}
112109
}
113110

114-
pub async fn edit(&self, req: EditRequest) -> Result<EditResponse, Error> {
111+
pub async fn edit(&self, req: EditRequest) -> Result<EditResponse, APIError> {
115112
let res = self.post("/edits", &req).await?;
116113
let r = res.json::<EditResponse>().await;
117114
match r {
@@ -123,7 +120,7 @@ impl Client {
123120
pub async fn image_generation(
124121
&self,
125122
req: ImageGenerationRequest,
126-
) -> Result<ImageGenerationResponse, Error> {
123+
) -> Result<ImageGenerationResponse, APIError> {
127124
let res = self.post("/images/generations", &req).await?;
128125
let r = res.json::<ImageGenerationResponse>().await;
129126
match r {
@@ -132,7 +129,7 @@ impl Client {
132129
}
133130
}
134131

135-
pub async fn image_edit(&self, req: ImageEditRequest) -> Result<ImageEditResponse, Error> {
132+
pub async fn image_edit(&self, req: ImageEditRequest) -> Result<ImageEditResponse, APIError> {
136133
let res = self.post("/images/edits", &req).await?;
137134
let r = res.json::<ImageEditResponse>().await;
138135
match r {
@@ -144,7 +141,7 @@ impl Client {
144141
pub async fn image_variation(
145142
&self,
146143
req: ImageVariationRequest,
147-
) -> Result<ImageVariationResponse, Error> {
144+
) -> Result<ImageVariationResponse, APIError> {
148145
let res = self.post("/images/variations", &req).await?;
149146
let r = res.json::<ImageVariationResponse>().await;
150147
match r {
@@ -153,7 +150,7 @@ impl Client {
153150
}
154151
}
155152

156-
pub async fn embedding(&self, req: EmbeddingRequest) -> Result<EmbeddingResponse, Error> {
153+
pub async fn embedding(&self, req: EmbeddingRequest) -> Result<EmbeddingResponse, APIError> {
157154
let res = self.post("/embeddings", &req).await?;
158155
let r = res.json::<EmbeddingResponse>().await;
159156
match r {
@@ -162,7 +159,7 @@ impl Client {
162159
}
163160
}
164161

165-
pub async fn file_list(&self) -> Result<FileListResponse, Error> {
162+
pub async fn file_list(&self) -> Result<FileListResponse, APIError> {
166163
let res = self.get("/files").await?;
167164
let r = res.json::<FileListResponse>().await;
168165
match r {
@@ -171,7 +168,10 @@ impl Client {
171168
}
172169
}
173170

174-
pub async fn file_upload(&self, req: FileUploadRequest) -> Result<FileUploadResponse, Error> {
171+
pub async fn file_upload(
172+
&self,
173+
req: FileUploadRequest,
174+
) -> Result<FileUploadResponse, APIError> {
175175
let res = self.post("/files", &req).await?;
176176
let r = res.json::<FileUploadResponse>().await;
177177
match r {
@@ -180,7 +180,10 @@ impl Client {
180180
}
181181
}
182182

183-
pub async fn file_delete(&self, req: FileDeleteRequest) -> Result<FileDeleteResponse, Error> {
183+
pub async fn file_delete(
184+
&self,
185+
req: FileDeleteRequest,
186+
) -> Result<FileDeleteResponse, APIError> {
184187
let res = self
185188
.delete(&format!("{}/{}", "/files", req.file_id))
186189
.await?;
@@ -194,7 +197,7 @@ impl Client {
194197
pub async fn file_retrieve(
195198
&self,
196199
req: FileRetrieveRequest,
197-
) -> Result<FileRetrieveResponse, Error> {
200+
) -> Result<FileRetrieveResponse, APIError> {
198201
let res = self.get(&format!("{}/{}", "/files", req.file_id)).await?;
199202
let r = res.json::<FileRetrieveResponse>().await;
200203
match r {
@@ -206,7 +209,7 @@ impl Client {
206209
pub async fn file_retrieve_content(
207210
&self,
208211
req: FileRetrieveContentRequest,
209-
) -> Result<FileRetrieveContentResponse, Error> {
212+
) -> Result<FileRetrieveContentResponse, APIError> {
210213
let res = self
211214
.get(&format!("{}/{}/content", "/files", req.file_id))
212215
.await?;
@@ -220,7 +223,7 @@ impl Client {
220223
pub async fn chat_completion(
221224
&self,
222225
req: ChatCompletionRequest,
223-
) -> Result<ChatCompletionResponse, Error> {
226+
) -> Result<ChatCompletionResponse, APIError> {
224227
let res = self.post("/chat/completions", &req).await?;
225228
let r = res.json::<ChatCompletionResponse>().await;
226229
match r {
@@ -229,7 +232,9 @@ impl Client {
229232
}
230233
}
231234

232-
fn new_error(&self, err: reqwest::Error) -> Error {
233-
Error::new(std::io::ErrorKind::Other, err)
235+
fn new_error(&self, err: reqwest::Error) -> APIError {
236+
APIError {
237+
message: err.to_string(),
238+
}
234239
}
235240
}

src/v1/error.rs

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
use std::error::Error;
2+
use std::fmt;
3+
4+
#[derive(Debug)]
5+
pub struct APIError {
6+
pub message: String,
7+
}
8+
9+
impl fmt::Display for APIError {
10+
fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
11+
write!(f, "APIError: {}", self.message)
12+
}
13+
}
14+
15+
impl Error for APIError {}

src/v1/mod.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
pub mod common;
2+
pub mod error;
23

34
pub mod chat_completion;
45
pub mod completion;

0 commit comments

Comments
 (0)