Skip to content

Commit 359e1a9

Browse files
committed
Simplify uploader error handling
1 parent 1c88de4 commit 359e1a9

File tree

2 files changed

+23
-18
lines changed

2 files changed

+23
-18
lines changed

src/uploaders.rs

Lines changed: 14 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -4,10 +4,9 @@ use openssl::hash::{Hasher, MessageDigest};
44
use reqwest::header;
55

66
use crate::util::errors::{cargo_err, internal, AppResult, ChainError};
7-
use crate::util::{LimitErrorReader, Maximums};
7+
use crate::util::{Error, LimitErrorReader, Maximums};
88

99
use std::env;
10-
use std::error::Error;
1110
use std::fs::{self, File};
1211
use std::io::{Cursor, Read};
1312
use std::sync::Arc;
@@ -97,27 +96,25 @@ impl Uploader {
9796
content_length: u64,
9897
content_type: &str,
9998
extra_headers: header::HeaderMap,
100-
) -> Result<Option<String>, Box<dyn Error>> {
99+
) -> Result<Option<String>, Error> {
101100
match *self {
102101
Uploader::S3 { ref bucket, .. } => {
103-
bucket
104-
.put(
105-
client,
106-
path,
107-
content,
108-
content_length,
109-
content_type,
110-
extra_headers,
111-
)
112-
.map_err(Box::new)?;
102+
bucket.put(
103+
client,
104+
path,
105+
content,
106+
content_length,
107+
content_type,
108+
extra_headers,
109+
)?;
113110
Ok(Some(String::from(path)))
114111
}
115112
Uploader::Local => {
116113
let filename = env::current_dir().unwrap().join("local_uploads").join(path);
117114
let dir = filename.parent().unwrap();
118-
fs::create_dir_all(dir).map_err(Box::new)?;
119-
let mut file = File::create(&filename).map_err(Box::new)?;
120-
std::io::copy(&mut content, &mut file).map_err(Box::new)?;
115+
fs::create_dir_all(dir)?;
116+
let mut file = File::create(&filename)?;
117+
std::io::copy(&mut content, &mut file)?;
121118
Ok(filename.to_str().map(String::from))
122119
}
123120
}
@@ -159,7 +156,7 @@ impl Uploader {
159156
crate_name: &str,
160157
vers: &str,
161158
readme: String,
162-
) -> Result<(), Box<dyn Error>> {
159+
) -> Result<(), Error> {
163160
let path = Uploader::readme_path(crate_name, vers);
164161
let content_length = readme.len() as u64;
165162
let content = Cursor::new(readme);

src/util/errors/concrete.rs

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,12 @@
1-
use std::{error, fmt};
1+
use std::{error, fmt, io};
22

33
#[derive(Debug)]
44
pub enum Error {
55
DbConnect(diesel::result::ConnectionError),
66
DbQuery(diesel::result::Error),
77
DotEnv(dotenv::Error),
88
Internal(String),
9+
Io(io::Error),
910
JobEnqueue(swirl::EnqueueError),
1011
Reqwest(reqwest::Error),
1112
}
@@ -19,6 +20,7 @@ impl fmt::Display for Error {
1920
Error::DbQuery(inner) => inner.fmt(f),
2021
Error::DotEnv(inner) => inner.fmt(f),
2122
Error::Internal(inner) => inner.fmt(f),
23+
Error::Io(inner) => inner.fmt(f),
2224
Error::JobEnqueue(inner) => inner.fmt(f),
2325
Error::Reqwest(inner) => inner.fmt(f),
2426
}
@@ -49,6 +51,12 @@ impl From<String> for Error {
4951
}
5052
}
5153

54+
impl From<io::Error> for Error {
55+
fn from(err: io::Error) -> Self {
56+
Error::Io(err)
57+
}
58+
}
59+
5260
impl From<swirl::EnqueueError> for Error {
5361
fn from(err: swirl::EnqueueError) -> Self {
5462
Error::JobEnqueue(err)

0 commit comments

Comments
 (0)