Lowercase all error messages

This commit is contained in:
timvisee 2018-05-10 17:27:35 +02:00
parent f348e603e2
commit 34aff28b10
No known key found for this signature in database
GPG key ID: 109CBA0BF74036C2
29 changed files with 166 additions and 178 deletions

View file

@ -1,6 +1,7 @@
# Release 0.1
- Print nice error in `cli/cmd/arg/download_limit.rs`
- Resolve panics with a nice error message
- Panic when secret is missing from URL with info action
- Lowercase error messages
- Switch to `directories` instead of `app_dirs2`?
- Allow file/directory archiving on upload
- Allow unarchiving on download

View file

@ -90,16 +90,16 @@ impl DeleteData {
#[derive(Fail, Debug)]
pub enum Error {
/// An error occurred while preparing the action.
#[fail(display = "Failed to prepare the action")]
#[fail(display = "failed to prepare the action")]
Prepare(#[cause] PrepareError),
/// The given Send file has expired, or did never exist in the first place.
/// Therefore the file could not be downloaded.
#[fail(display = "The file has expired or did never exist")]
#[fail(display = "the file has expired or did never exist")]
Expired,
/// An error has occurred while sending the filedeletion request.
#[fail(display = "Failed to send the file deletion request")]
#[fail(display = "failed to send the file deletion request")]
Delete(#[cause] DeleteError),
}
@ -136,23 +136,23 @@ pub enum DeleteDataError {
#[derive(Fail, Debug)]
pub enum PrepareError {
/// Failed to authenticate
#[fail(display = "Failed to authenticate")]
#[fail(display = "failed to authenticate")]
Auth(#[cause] NonceError),
/// An error occurred while building the deletion data that will be
/// send to the server.
#[fail(display = "Invalid parameters")]
#[fail(display = "invalid parameters")]
DeleteData(#[cause] DeleteDataError),
}
#[derive(Fail, Debug)]
pub enum DeleteError {
/// Sending the file deletion request failed.
#[fail(display = "Failed to send file deletion request")]
#[fail(display = "failed to send file deletion request")]
Request,
/// The server responded with an error while requesting file deletion.
#[fail(display = "Bad response from server while deleting file")]
#[fail(display = "bad response from server while deleting file")]
Response(#[cause] ResponseError),
}

View file

@ -253,29 +253,29 @@ pub enum Error {
/// An error occurred while fetching the metadata of the file.
/// This step is required in order to succsessfully decrypt the
/// file that will be downloaded.
#[fail(display = "Failed to fetch file metadata")]
#[fail(display = "failed to fetch file metadata")]
Meta(#[cause] MetadataError),
/// The given Send file has expired, or did never exist in the first place.
/// Therefore the file could not be downloaded.
#[fail(display = "The file has expired or did never exist")]
#[fail(display = "the file has expired or did never exist")]
Expired,
/// A password is required, but was not given.
#[fail(display = "Missing password, password required")]
#[fail(display = "missing password, password required")]
PasswordRequired,
/// An error occurred while downloading the file.
#[fail(display = "Failed to download the file")]
#[fail(display = "failed to download the file")]
Download(#[cause] DownloadError),
/// An error occurred while decrypting the downloaded file.
#[fail(display = "Failed to decrypt the downloaded file")]
#[fail(display = "failed to decrypt the downloaded file")]
Decrypt,
/// An error occurred while opening or writing to the target file.
// TODO: show what file this is about
#[fail(display = "Couldn't use the target file at '{}'", _0)]
#[fail(display = "couldn't use the target file at '{}'", _0)]
File(String, #[cause] FileError),
}
@ -299,46 +299,46 @@ impl From<DownloadError> for Error {
pub enum DownloadError {
/// An error occurred while computing the cryptographic signature used for
/// downloading the file.
#[fail(display = "Failed to compute cryptographic signature")]
#[fail(display = "failed to compute cryptographic signature")]
ComputeSignature,
/// Sending the request to download the file failed.
#[fail(display = "Failed to request file download")]
#[fail(display = "failed to request file download")]
Request,
/// The server responded with an error while requesting the file download.
#[fail(display = "Bad response from server while requesting download")]
#[fail(display = "bad response from server while requesting download")]
Response(#[cause] ResponseError),
/// The length of the file is missing, thus the length of the file to download
/// couldn't be determined.
#[fail(display = "Couldn't determine file download length, missing property")]
#[fail(display = "couldn't determine file download length, missing property")]
NoLength,
/// Failed to start or update the downloading progress, because of this the
/// download can't continue.
#[fail(display = "Failed to update download progress")]
#[fail(display = "failed to update download progress")]
Progress,
/// The actual download and decryption process the server.
/// This covers reading the file from the server, decrypting the file,
/// and writing it to the file system.
#[fail(display = "Failed to download the file")]
#[fail(display = "failed to download the file")]
Download,
/// Verifying the downloaded file failed.
#[fail(display = "File verification failed")]
#[fail(display = "file verification failed")]
Verify,
}
#[derive(Fail, Debug)]
pub enum FileError {
/// An error occurred while creating or opening the file to write to.
#[fail(display = "Failed to create or replace the file")]
#[fail(display = "failed to create or replace the file")]
Create(#[cause] IoError),
/// Failed to create an encrypted writer for the file, which is used to
/// decrypt the downloaded file.
#[fail(display = "Failed to create file decryptor")]
#[fail(display = "failed to create file decryptor")]
EncryptedWriter,
}

View file

@ -102,18 +102,18 @@ impl Default for ExistsResponse {
#[derive(Fail, Debug)]
pub enum Error {
/// Sending the request to check whether the file exists failed.
#[fail(display = "Failed to send request whether the file exists")]
#[fail(display = "failed to send request whether the file exists")]
Request,
/// The server responded with an error while checking whether the file
/// exists.
#[fail(display = "Bad response from server while checking file existence")]
#[fail(display = "bad response from server while checking file existence")]
Response(#[cause] ResponseError),
/// The response from the server when checking if the file exists was
/// malformed.
/// Maybe the server responded with a new format that isn't supported yet
/// by this client.
#[fail(display = "Received malformed authentication nonce")]
#[fail(display = "received malformed authentication nonce")]
Malformed,
}

View file

@ -139,16 +139,16 @@ impl InfoResponse {
#[derive(Fail, Debug)]
pub enum Error {
/// An error occurred while preparing the action.
#[fail(display = "Failed to prepare the action")]
#[fail(display = "failed to prepare the action")]
Prepare(#[cause] PrepareError),
/// The given Send file has expired, or did never exist in the first place.
/// Therefore the file could not be downloaded.
#[fail(display = "The file has expired or did never exist")]
#[fail(display = "the file has expired or did never exist")]
Expired,
/// An error has occurred while sending the info request to the server.
#[fail(display = "Failed to send the file info request")]
#[fail(display = "failed to send the file info request")]
Info(#[cause] InfoError),
}
@ -194,12 +194,12 @@ pub enum InfoDataError {
#[derive(Fail, Debug)]
pub enum PrepareError {
/// Failed authenticating, needed to fetch the info
#[fail(display = "Failed to authenticate")]
#[fail(display = "failed to authenticate")]
Auth(#[cause] NonceError),
/// An error occurred while building the info data that will be
/// send to the server.
#[fail(display = "Invalid parameters")]
#[fail(display = "invalid parameters")]
InfoData(#[cause] InfoDataError),
}
@ -212,15 +212,15 @@ impl From<DataError> for PrepareError {
#[derive(Fail, Debug)]
pub enum InfoError {
/// Sending the request to fetch the file info failed.
#[fail(display = "Failed to send file info request")]
#[fail(display = "failed to send file info request")]
Request,
/// The server responded with an error while fetching the file info.
#[fail(display = "Bad response from server while fetching file info")]
#[fail(display = "bad response from server while fetching file info")]
Response(#[cause] ResponseError),
/// Failed to decode the info response from the server.
/// Maybe the server responded with data from a newer API version.
#[fail(display = "Failed to decode info response")]
#[fail(display = "failed to decode info response")]
Decode(#[cause] ReqwestError),
}

View file

@ -231,22 +231,22 @@ impl<'a> MetadataResponse {
pub enum Error {
/// An error occurred while checking whether the file exists on the
/// server.
#[fail(display = "Failed to check whether the file exists")]
#[fail(display = "failed to check whether the file exists")]
Exists(#[cause] ExistsError),
/// A general error occurred while requesting the file data.
/// This may be because authentication failed, because decrypting the
/// file metadata didn't succeed, or due to some other reason.
#[fail(display = "Failed to request file data")]
#[fail(display = "failed to request file data")]
Request(#[cause] RequestError),
/// The given Send file has expired, or did never exist in the first place.
/// Therefore the file could not be downloaded.
#[fail(display = "The file has expired or did never exist")]
#[fail(display = "the file has expired or did never exist")]
Expired,
/// A password is required, but was not given.
#[fail(display = "Missing password, password required")]
#[fail(display = "missing password, password required")]
PasswordRequired,
}
@ -280,11 +280,11 @@ impl From<NonceError> for Error {
#[derive(Fail, Debug)]
pub enum RequestError {
/// Failed authenticating, in order to fetch the file data.
#[fail(display = "Failed to authenticate")]
#[fail(display = "failed to authenticate")]
Auth(#[cause] NonceError),
/// Failed to retrieve the file metadata.
#[fail(display = "Failed to retrieve file metadata")]
#[fail(display = "failed to retrieve file metadata")]
Meta(#[cause] MetaError),
}
@ -292,28 +292,28 @@ pub enum RequestError {
pub enum MetaError {
/// An error occurred while computing the cryptographic signature used for
/// decryption.
#[fail(display = "Failed to compute cryptographic signature")]
#[fail(display = "failed to compute cryptographic signature")]
ComputeSignature,
/// Sending the request to gather the metadata encryption nonce failed.
#[fail(display = "Failed to request metadata nonce")]
#[fail(display = "failed to request metadata nonce")]
NonceRequest,
/// The server responded with an error while fetching the metadata
/// encryption nonce.
#[fail(display = "Bad response from server while fetching metadata nonce")]
#[fail(display = "bad response from server while fetching metadata nonce")]
NonceResponse(#[cause] ResponseError),
/// Couldn't parse the metadata encryption nonce.
#[fail(display = "Failed to parse the metadata encryption nonce")]
#[fail(display = "failed to parse the metadata encryption nonce")]
Nonce(#[cause] NonceError),
/// The received metadata is malformed, and couldn't be decoded or
/// interpreted.
#[fail(display = "Received malformed metadata")]
#[fail(display = "received malformed metadata")]
Malformed,
/// Failed to decrypt the received metadata.
#[fail(display = "Failed to decrypt received metadata")]
#[fail(display = "failed to decrypt received metadata")]
Decrypt,
}

View file

@ -162,17 +162,17 @@ impl Default for ParamsData {
#[derive(Fail, Debug)]
pub enum Error {
/// An error occurred while preparing the action.
#[fail(display = "Failed to prepare setting the parameters")]
#[fail(display = "failed to prepare setting the parameters")]
Prepare(#[cause] PrepareError),
/// The given Send file has expired, or did never exist in the first place.
/// Therefore the file could not be downloaded.
#[fail(display = "The file has expired or did never exist")]
#[fail(display = "the file has expired or did never exist")]
Expired,
/// An error has occurred while sending the parameter change request to
/// the server.
#[fail(display = "Failed to send the parameter change request")]
#[fail(display = "failed to send the parameter change request")]
Change(#[cause] ChangeError),
}
@ -211,7 +211,7 @@ pub enum ParamsDataError {
/// The number of downloads is invalid, as it was out of the allowed
/// bounds. See `PARAMS_DOWNLOAD_MIN` and `PARAMS_DOWNLOAD_MAX`.
// TODO: use bound values from constants, don't hardcode them here
#[fail(display = "Invalid number of downloads, must be between 1 and 20")]
#[fail(display = "invalid number of downloads, must be between 1 and 20")]
DownloadBounds,
/// Some error occurred while trying to wrap the parameter data in an
@ -224,12 +224,12 @@ pub enum ParamsDataError {
#[derive(Fail, Debug)]
pub enum PrepareError {
/// Failed authenticating, needed to change the parameters.
#[fail(display = "Failed to authenticate")]
#[fail(display = "failed to authenticate")]
Auth(#[cause] NonceError),
/// An error occurred while building the parameter data that will be send
/// to the server.
#[fail(display = "Invalid parameters")]
#[fail(display = "invalid parameters")]
ParamsData(#[cause] ParamsDataError),
}
@ -242,10 +242,10 @@ impl From<DataError> for PrepareError {
#[derive(Fail, Debug)]
pub enum ChangeError {
/// Sending the request to change the parameters failed.
#[fail(display = "Failed to send parameter change request")]
#[fail(display = "failed to send parameter change request")]
Request,
/// The server responded with an error while changing the file parameters.
#[fail(display = "Bad response from server while changing parameters")]
#[fail(display = "bad response from server while changing parameters")]
Response(#[cause] ResponseError),
}

View file

@ -108,17 +108,17 @@ impl PasswordData {
#[derive(Fail, Debug)]
pub enum Error {
/// An error occurred while preparing the action.
#[fail(display = "Failed to prepare setting the password")]
#[fail(display = "failed to prepare setting the password")]
Prepare(#[cause] PrepareError),
/// The given Send file has expired, or did never exist in the first place.
/// Therefore the file could not be downloaded.
#[fail(display = "The file has expired or did never exist")]
#[fail(display = "the file has expired or did never exist")]
Expired,
/// An error has occurred while sending the password change request to
/// the server.
#[fail(display = "Failed to send the password change request")]
#[fail(display = "failed to send the password change request")]
Change(#[cause] ChangeError),
}
@ -155,7 +155,7 @@ impl From<ResponseError> for Error {
#[derive(Fail, Debug)]
pub enum PrepareError {
/// Failed authenticating, needed to set a new password.
#[fail(display = "Failed to authenticate")]
#[fail(display = "failed to authenticate")]
Auth(#[cause] NonceError),
/// Some error occurred while building the data that will be sent.
@ -174,10 +174,10 @@ impl From<DataError> for PrepareError {
#[derive(Fail, Debug)]
pub enum ChangeError {
/// Sending the request to change the password failed.
#[fail(display = "Failed to send password change request")]
#[fail(display = "failed to send password change request")]
Request,
/// The server responded with an error while changing the file password.
#[fail(display = "Bad response from server while changing password")]
#[fail(display = "bad response from server while changing password")]
Response(#[cause] ResponseError),
}

View file

@ -355,7 +355,7 @@ impl<'a> FileData<'a> {
#[derive(Fail, Debug)]
pub enum Error {
/// An error occurred while preparing a file for uploading.
#[fail(display = "Failed to prepare uploading the file")]
#[fail(display = "failed to prepare uploading the file")]
Prepare(#[cause] PrepareError),
/// An error occurred while opening, reading or using the file that
@ -365,15 +365,15 @@ pub enum Error {
File(#[cause] FileError),
/// An error occurred while uploading the file.
#[fail(display = "Failed to upload the file")]
#[fail(display = "failed to upload the file")]
Upload(#[cause] UploadError),
/// An error occurred while chaining file parameters.
#[fail(display = "Failed to change file parameters")]
#[fail(display = "failed to change file parameters")]
Params(#[cause] ParamsError),
/// An error occurred while setting the password.
#[fail(display = "Failed to set the password")]
#[fail(display = "failed to set the password")]
Password(#[cause] PasswordError),
}
@ -416,42 +416,42 @@ impl From<PasswordError> for Error {
#[derive(Fail, Debug)]
pub enum PrepareError {
/// Failed to prepare the file metadata for uploading.
#[fail(display = "Failed to prepare file metadata")]
#[fail(display = "failed to prepare file metadata")]
Meta(#[cause] MetaError),
/// Failed to create an encrypted file reader, that encrypts
/// the file on the fly when it is read.
#[fail(display = "Failed to access the file to upload")]
#[fail(display = "failed to access the file to upload")]
Reader(#[cause] ReaderError),
}
#[derive(Fail, Debug)]
pub enum MetaError {
/// An error occurred while encrypting the file metadata.
#[fail(display = "Failed to encrypt file metadata")]
#[fail(display = "failed to encrypt file metadata")]
Encrypt,
}
#[derive(Fail, Debug)]
pub enum ReaderError {
/// An error occurred while creating the file encryptor.
#[fail(display = "Failed to create file encryptor")]
#[fail(display = "failed to create file encryptor")]
Encrypt,
/// Failed to create the progress reader, attached to the file reader,
/// to measure the uploading progress.
#[fail(display = "Failed to create progress reader")]
#[fail(display = "failed to create progress reader")]
Progress,
}
#[derive(Fail, Debug)]
pub enum FileError {
/// The given path, is not not a file or doesn't exist.
#[fail(display = "The given path is not an existing file")]
#[fail(display = "the given path is not an existing file")]
NotAFile,
/// Failed to open the file that must be uploaded for reading.
#[fail(display = "Failed to open the file to upload")]
#[fail(display = "failed to open the file to upload")]
Open(#[cause] IoError),
}
@ -459,24 +459,24 @@ pub enum FileError {
pub enum UploadError {
/// Failed to start or update the uploading progress, because of this the
/// upload can't continue.
#[fail(display = "Failed to update upload progress")]
#[fail(display = "failed to update upload progress")]
Progress,
/// Sending the request to upload the file failed.
#[fail(display = "Failed to request file upload")]
#[fail(display = "failed to request file upload")]
Request,
/// The server responded with an error while uploading.
#[fail(display = "Bad response from server while uploading")]
#[fail(display = "bad response from server while uploading")]
Response(#[cause] ResponseError),
/// Failed to decode the upload response from the server.
/// Maybe the server responded with data from a newer API version.
#[fail(display = "Failed to decode upload response")]
#[fail(display = "failed to decode upload response")]
Decode(#[cause] ReqwestError),
/// Failed to parse the retrieved URL from the upload response.
#[fail(display = "Failed to parse received URL")]
#[fail(display = "failed to parse received URL")]
ParseUrl(#[cause] UrlParseError),
}

View file

@ -45,6 +45,6 @@ impl<D> OwnedData<D>
#[derive(Debug, Fail)]
pub enum Error {
/// Missing owner token, which is required.
#[fail(display = "Missing owner token, must be specified")]
#[fail(display = "missing owner token, must be specified")]
NoOwnerToken,
}

View file

@ -49,26 +49,26 @@ pub fn header_nonce(response: &Response)
pub enum NonceError {
/// Sending the request to fetch a nonce failed,
/// as the file has expired or did never exist.
#[fail(display = "The file has expired or did never exist")]
#[fail(display = "the file has expired or did never exist")]
Expired,
/// Sending the request to fetch a nonce failed.
#[fail(display = "Failed to request encryption nonce")]
#[fail(display = "failed to request encryption nonce")]
Request,
/// The server responded with an error while requesting the encryption nonce,
/// required for some operations.
#[fail(display = "Bad response from server while requesting encryption nonce")]
#[fail(display = "bad response from server while requesting encryption nonce")]
Response(#[cause] ResponseError),
/// The nonce header was missing from the request.
#[fail(display = "Missing nonce in server response")]
#[fail(display = "missing nonce in server response")]
NoNonceHeader,
/// The received nonce could not be parsed, because it was malformed.
/// Maybe the server responded with a new format that isn't supported yet
/// by this client.
#[fail(display = "Received malformed nonce")]
#[fail(display = "received malformed nonce")]
MalformedNonce,
}

View file

@ -30,15 +30,15 @@ pub fn ensure_success(response: &Response) -> Result<(), ResponseError> {
#[derive(Fail, Debug)]
pub enum ResponseError {
/// This request lead to an expired file, or a file that never existed.
#[fail(display = "This file has expired or did never exist")]
#[fail(display = "this file has expired or did never exist")]
Expired,
/// We were unauthorized to make this request.
/// This is usually because of an incorrect password.
#[fail(display = "Unauthorized, are the credentials correct?")]
#[fail(display = "unauthorized, are the credentials correct?")]
Unauthorized,
/// Some undefined error occurred with this response.
#[fail(display = "Bad HTTP response: {}", _1)]
#[fail(display = "bad HTTP response: {}", _1)]
Other(StatusCode, String),
}

View file

@ -325,14 +325,14 @@ impl RemoteFile {
#[derive(Debug, Fail)]
pub enum FileParseError {
/// An URL format error.
#[fail(display = "Failed to parse remote file, invalid URL format")]
#[fail(display = "failed to parse remote file, invalid URL format")]
UrlFormatError(#[cause] UrlParseError),
/// An error for an invalid share URL format.
#[fail(display = "Failed to parse remote file, invalid URL")]
#[fail(display = "failed to parse remote file, invalid URL")]
InvalidUrl,
/// An error for an invalid secret format, if an URL fragmet exists.
#[fail(display = "Failed to parse remote file, invalid secret in URL")]
#[fail(display = "failed to parse remote file, invalid secret in URL")]
InvalidSecret,
}

View file

@ -514,21 +514,6 @@ impl Write for EncryptedFileWriter {
}
}
/// A writer wrapper, that measures the reading process for a writer with a
/// known length.
///

View file

@ -73,15 +73,15 @@ impl<'a> Delete<'a> {
pub enum Error {
/// Failed to parse a share URL, it was invalid.
/// This error is not related to a specific action.
#[fail(display = "Invalid share URL")]
#[fail(display = "invalid share URL")]
InvalidUrl(#[cause] FileParseError),
/// Could not delete, the file has expired or did never exist.
#[fail(display = "The file has expired or did never exist")]
#[fail(display = "the file has expired or did never exist")]
Expired,
/// An error occurred while deleting the remote file.
#[fail(display = "Failed to delete the shared file")]
#[fail(display = "failed to delete the shared file")]
Delete(#[cause] DeleteError),
}

View file

@ -172,12 +172,12 @@ impl<'a> Download<'a> {
// Create the parent directories
if let Err(err) = create_dir_all(parent) {
quit_error(err.context(
"Failed to create parent directories for output file",
"failed to create parent directories for output file",
), ErrorHints::default());
}
},
None => quit_error_msg(
"Invalid output file path",
"invalid output file path",
ErrorHints::default(),
),
}
@ -198,7 +198,7 @@ impl<'a> Download<'a> {
match target.canonicalize() {
Ok(target) => return target,
Err(err) => quit_error(
err.context("Failed to canonicalize target path"),
err.context("failed to canonicalize target path"),
ErrorHints::default(),
),
}
@ -209,7 +209,7 @@ impl<'a> Download<'a> {
match target.canonicalize() {
Ok(target) => return target.join(name_hint),
Err(err) => quit_error(
err.context("Failed to canonicalize target path"),
err.context("failed to canonicalize target path"),
ErrorHints::default(),
),
}
@ -228,7 +228,7 @@ impl<'a> Download<'a> {
match current_dir() {
Ok(target) => return target.join(name_hint),
Err(err) => quit_error(err.context(
"Failed to determine working directory to use for the output file"
"failed to determine working directory to use for the output file"
), ErrorHints::default()),
}
}
@ -247,7 +247,7 @@ impl<'a> Download<'a> {
match current_dir() {
Ok(workdir) => target = workdir.join(target),
Err(err) => quit_error(err.context(
"Failed to determine working directory to use for the output file"
"failed to determine working directory to use for the output file"
), ErrorHints::default()),
}
}
@ -260,15 +260,15 @@ impl<'a> Download<'a> {
pub enum Error {
/// Failed to parse a share URL, it was invalid.
/// This error is not related to a specific action.
#[fail(display = "Invalid share URL")]
#[fail(display = "invalid share URL")]
InvalidUrl(#[cause] FileParseError),
/// An error occurred while checking if the file exists.
#[fail(display = "Failed to check whether the file exists")]
#[fail(display = "failed to check whether the file exists")]
Exists(#[cause] ExistsError),
/// An error occurred while fetching metadata.
#[fail(display = "Failed to fetch file metadata")]
#[fail(display = "failed to fetch file metadata")]
Metadata(#[cause] MetadataError),
/// An error occurred while downloading the file.
@ -276,7 +276,7 @@ pub enum Error {
Download(#[cause] DownloadError),
/// The given Send file has expired, or did never exist in the first place.
#[fail(display = "The file has expired or did never exist")]
#[fail(display = "the file has expired or did never exist")]
Expired,
}

View file

@ -72,11 +72,11 @@ impl<'a> Exists<'a> {
pub enum Error {
/// Failed to parse a share URL, it was invalid.
/// This error is not related to a specific action.
#[fail(display = "Invalid share URL")]
#[fail(display = "invalid share URL")]
InvalidUrl(#[cause] FileParseError),
/// An error occurred while checking if the file exists.
#[fail(display = "Failed to check whether the file exists")]
#[fail(display = "failed to check whether the file exists")]
Exists(#[cause] ExistsError),
}

View file

@ -43,7 +43,7 @@ impl<'a> History<'a> {
// Get the history path, make sure it exists
let history_path = matcher_main.history();
if !history_path.is_file() {
println!("No files in history");
eprintln!("No files in history");
return Ok(());
}
@ -52,7 +52,7 @@ impl<'a> History<'a> {
// Do not report any files if there aren't any
if history.files().is_empty() {
println!("No files in history");
eprintln!("No files in history");
return Ok(());
}

View file

@ -83,7 +83,7 @@ impl<'a> Info<'a> {
let metadata = ApiMetadata::new(&file, password, false)
.invoke(&client)
.map_err(|err| print_error(err.context(
"Failed to fetch file metadata, showing limited info",
"failed to fetch file metadata, showing limited info",
)))
.ok();
@ -124,19 +124,19 @@ impl<'a> Info<'a> {
pub enum Error {
/// Failed to parse a share URL, it was invalid.
/// This error is not related to a specific action.
#[fail(display = "Invalid share URL")]
#[fail(display = "invalid share URL")]
InvalidUrl(#[cause] FileParseError),
/// An error occurred while checking if the file exists.
#[fail(display = "Failed to check whether the file exists")]
#[fail(display = "failed to check whether the file exists")]
Exists(#[cause] ExistsError),
/// An error occurred while fetching the file information.
#[fail(display = "Failed to fetch file info")]
#[fail(display = "failed to fetch file info")]
Info(#[cause] InfoError),
/// The given Send file has expired, or did never exist in the first place.
#[fail(display = "The file has expired or did never exist")]
#[fail(display = "the file has expired or did never exist")]
Expired,
}

View file

@ -61,7 +61,7 @@ impl<'a> Upload<'a> {
// The file is too large, show an error and quit
quit_error_msg(
format!(
"The file size is {}, bigger than the maximum allowed of {}",
"the file size is {}, bigger than the maximum allowed of {}",
format_bytes(size),
format_bytes(UPLOAD_SIZE_MAX),
),
@ -74,7 +74,7 @@ impl<'a> Upload<'a> {
} else if size > UPLOAD_SIZE_MAX_RECOMMENDED && !matcher_main.force() {
// The file is larger than the recommended maximum, warn
eprintln!(
"The file size is {}, bigger than the recommended maximum of {}",
"the file size is {}, bigger than the recommended maximum of {}",
format_bytes(size),
format_bytes(UPLOAD_SIZE_MAX_RECOMMENDED),
);
@ -86,7 +86,7 @@ impl<'a> Upload<'a> {
}
}
} else {
print_error_msg("Failed to check the file size, ignoring");
print_error_msg("failed to check the file size, ignoring");
}
// Create a reqwest client
@ -132,7 +132,7 @@ impl<'a> Upload<'a> {
if matcher_upload.open() {
if let Err(err) = open_url(url.clone()) {
print_error(
err.context("Failed to open the URL in the browser")
err.context("failed to open the URL in the browser")
);
};
}
@ -143,7 +143,7 @@ impl<'a> Upload<'a> {
if matcher_upload.copy() {
if set_clipboard(url.as_str().to_owned()).is_err() {
print_error(
err_msg("Failed to copy the URL to the clipboard")
err_msg("failed to copy the URL to the clipboard")
.compat()
);
}

View file

@ -41,6 +41,7 @@ impl<'a> CmdArgOption<'a> for ArgDownloadLimit {
.map(|d| d.parse::<u8>().expect("invalid download limit"))
.and_then(|d| {
// Check the download limit bounds
// TODO: print a nicely formatted error here
if d < DOWNLOAD_MIN || d > DOWNLOAD_MAX {
panic!(
"invalid download limit, must be between {} and {}",

View file

@ -37,7 +37,7 @@ impl<'a> CmdArgOption<'a> for ArgHost {
match parse_host(&url) {
Ok(url) => url,
Err(err) => quit_error(
err.context("Failed to parse the given host"),
err.context("failed to parse the given host"),
ErrorHints::default(),
),
}

View file

@ -33,7 +33,7 @@ impl<'a> CmdArgOption<'a> for ArgUrl {
match parse_host(&url) {
Ok(url) => url,
Err(err) => quit_error(
err.context("Failed to parse the given share URL"),
err.context("failed to parse the given share URL"),
ErrorHints::default(),
),
}

View file

@ -36,7 +36,7 @@ impl<'a: 'b, 'b> MainMatcher<'a> {
match path {
Some(path) => path,
None => quit_error_msg(
"History file path not set",
"history file path not set",
ErrorHintsBuilder::default()
.history(true)
.verbose(false)

View file

@ -37,41 +37,41 @@ impl From<ActionError> for Error {
#[derive(Debug, Fail)]
pub enum ActionError {
/// An error occurred while invoking the delete action.
#[fail(display = "Failed to delete the file")]
#[fail(display = "failed to delete the file")]
Delete(#[cause] DeleteError),
/// An error occurred while invoking the download action.
#[fail(display = "Failed to download the requested file")]
#[fail(display = "failed to download the requested file")]
Download(#[cause] CliDownloadError),
/// An error occurred while invoking the exists action.
#[fail(display = "Failed to check whether the file exists")]
#[fail(display = "failed to check whether the file exists")]
Exists(#[cause] ExistsError),
/// An error occurred while processing the file history.
#[fail(display = "Failed to process the history")]
#[fail(display = "failed to process the history")]
History(#[cause] CliHistoryError),
/// An error occurred while invoking the info action.
#[fail(display = "Failed to fetch file info")]
#[fail(display = "failed to fetch file info")]
Info(#[cause] CliInfoError),
/// An error occurred while invoking the params action.
#[fail(display = "Failed to change the parameters")]
#[fail(display = "failed to change the parameters")]
Params(#[cause] ParamsError),
/// An error occurred while invoking the password action.
#[fail(display = "Failed to change the password")]
#[fail(display = "failed to change the password")]
Password(#[cause] PasswordError),
/// An error occurred while invoking the upload action.
// TODO: bind the upload cause here
#[fail(display = "Failed to upload the specified file")]
#[fail(display = "failed to upload the specified file")]
Upload(#[cause] UploadError),
/// Failed to parse a share URL, it was invalid.
/// This error is not related to a specific action.
#[fail(display = "Invalid share URL")]
#[fail(display = "invalid share URL")]
InvalidUrl(#[cause] FileParseError),
}

View file

@ -74,9 +74,9 @@ impl History {
let version = history.version.as_ref().unwrap();
if let Ok(true) = VersionCompare::compare_to(version, VERSION_MIN, &CompOp::Lt) {
print_warning("History file version is too old, ignoring");
print_warning("history file version is too old, ignoring");
} else if let Ok(true) = VersionCompare::compare_to(version, VERSION_MAX, &CompOp::Gt) {
print_warning("History file has an unknown version, ignoring");
print_warning("history file has an unknown version, ignoring");
}
}
@ -244,7 +244,7 @@ impl Drop for History {
// Save and report errors
if let Err(err) = self.save() {
print_error(
err.context("Failed to auto save history, ignoring"),
err.context("failed to auto save history, ignoring"),
);
}
}
@ -265,11 +265,11 @@ impl Default for History {
#[derive(Debug, Fail)]
pub enum Error {
/// An error occurred while loading the history from a file.
#[fail(display = "Failed to load history from file")]
#[fail(display = "failed to load history from file")]
Load(#[cause] LoadError),
/// An error occurred while saving the history to a file.
#[fail(display = "Failed to save history to file")]
#[fail(display = "failed to save history to file")]
Save(#[cause] SaveError),
}
@ -311,20 +311,20 @@ impl From<DeError> for LoadError {
#[derive(Debug, Fail)]
pub enum SaveError {
/// No autosave file path was present, failed to save.
#[fail(display = "No autosave file path specified")]
#[fail(display = "no autosave file path specified")]
NoPath,
/// Failed to serialize the history for saving.
#[fail(display = "Failed to serialize the history for saving")]
#[fail(display = "failed to serialize the history for saving")]
Serialize(#[cause] SerError),
/// Failed to write to the history file.
#[fail(display = "Failed to write to the history file")]
#[fail(display = "failed to write to the history file")]
Write(#[cause] IoError),
/// Failed to delete the history file, which was tried because there
/// are no history items to save.
#[fail(display = "Failed to delete history file, because history is empty")]
#[fail(display = "failed to delete history file, because history is empty")]
Delete(#[cause] IoError),
}

View file

@ -42,7 +42,7 @@ fn add_error(matcher_main: &MainMatcher, file: RemoteFile, overwrite: bool)
pub fn add(matcher_main: &MainMatcher, file: RemoteFile, overwrite: bool) {
if let Err(err) = add_error(matcher_main, file, overwrite) {
print_error(err.context(
"Failed to add file to local history, ignoring",
"failed to add file to local history, ignoring",
));
}
}
@ -73,7 +73,7 @@ pub fn remove(matcher_main: &MainMatcher, file: &RemoteFile) -> bool {
let ok = result.is_ok();
if let Err(err) = result {
print_error(err.context(
"Failed to remove file from local history, ignoring",
"failed to remove file from local history, ignoring",
));
}
ok
@ -109,7 +109,7 @@ pub fn derive_owner_token(matcher_main: &MainMatcher, file: &mut RemoteFile) ->
Ok(history) => history,
Err(err) => {
print_error(err.context(
"Failed to derive file owner token from history, ignoring",
"failed to derive file owner token from history, ignoring",
));
return false;
}

View file

@ -26,34 +26,34 @@ pub fn parse_host(host: &str) -> Result<Url, HostError> {
#[derive(Debug, Fail)]
pub enum HostError {
/// The URL scheme is missing or invalid.
#[fail(display = "The URL must have the 'https://' or 'http://' scheme")]
#[fail(display = "the URL must have the 'https://' or 'http://' scheme")]
Scheme,
/// The host address is empty.
#[fail(display = "Empty host address")]
#[fail(display = "empty host address")]
Empty,
/// The port number is invalid.
#[fail(display = "Invalid port")]
#[fail(display = "invalid port")]
Port,
/// The given IPv4 styled address is invalid.
#[fail(display = "Invalid IPv4 address in the host")]
#[fail(display = "invalid IPv4 address in the host")]
Ipv4,
/// The given IPv6 styled address is invalid.
#[fail(display = "Invalid IPv6 address in the host")]
#[fail(display = "invalid IPv6 address in the host")]
Ipv6,
/// The domain contains an invalid character.
#[fail(display = "Invalid character in the domain")]
#[fail(display = "invalid character in the domain")]
DomainCharacter,
/// The base host is missing from the host URL.
#[fail(display = "Missing host in the host URL")]
#[fail(display = "missing host in the host URL")]
NoBase,
/// Failed to parse the host URL due to another reason.
#[fail(display = "Could not parse host URL")]
#[fail(display = "could not parse host URL")]
Other(#[cause] ParseError),
}

View file

@ -49,7 +49,7 @@ pub fn print_error<E: Fail>(err: E) {
// Fall back to a basic message
if count == 0 {
eprintln!("{} {}", highlight_error("error:"), "An undefined error occurred");
eprintln!("{} {}", highlight_error("error:"), "an undefined error occurred");
}
}
@ -250,7 +250,7 @@ pub fn set_clipboard(content: String) -> Result<(), Box<StdError>> {
pub fn check_empty_password(password: &str, matcher_main: &MainMatcher) {
if !matcher_main.force() && password.is_empty() {
quit_error_msg(
"An empty password is not supported by the web interface",
"an empty password is not supported by the web interface",
ErrorHintsBuilder::default()
.force(true)
.verbose(false)
@ -267,7 +267,7 @@ pub fn prompt_password(main_matcher: &MainMatcher) -> String {
// Quit with an error if we may not interact
if main_matcher.no_interact() {
quit_error_msg(
"Missing password, must be specified in no-interact mode",
"missing password, must be specified in no-interact mode",
ErrorHintsBuilder::default()
.password(true)
.verbose(false)
@ -280,7 +280,7 @@ pub fn prompt_password(main_matcher: &MainMatcher) -> String {
match prompt_password_stderr("Password: ") {
Ok(password) => password,
Err(err) => quit_error(err.context(
"Failed to read password from password prompt"
"failed to read password from password prompt"
), ErrorHints::default()),
}
}
@ -319,7 +319,7 @@ pub fn prompt(msg: &str, main_matcher: &MainMatcher) -> String {
// Quit with an error if we may not interact
if main_matcher.no_interact() {
quit_error_msg(format!(
"Could not prompt for '{}' in no-interact mode, maybe specify it",
"could not prompt for '{}' in no-interact mode, maybe specify it",
msg,
), ErrorHints::default());
}
@ -332,7 +332,7 @@ pub fn prompt(msg: &str, main_matcher: &MainMatcher) -> String {
let mut input = String::new();
if let Err(err) = stdin().read_line(&mut input) {
quit_error(err.context(
"Failed to read input from prompt"
"failed to read input from prompt"
), ErrorHints::default());
}
@ -376,7 +376,7 @@ pub fn prompt_yes(
return def;
} else {
quit_error_msg(format!(
"Could not prompt question '{}' in no-interact mode, maybe specify it",
"could not prompt question '{}' in no-interact mode, maybe specify it",
msg,
), ErrorHints::default());
}
@ -451,7 +451,7 @@ pub fn ensure_owner_token(
*token = Some(prompt_owner_token(main_matcher));
} else {
quit_error_msg(
"Missing owner token, must be specified in no-interact mode",
"missing owner token, must be specified in no-interact mode",
ErrorHintsBuilder::default()
.owner(true)
.verbose(false)
@ -546,19 +546,20 @@ pub fn exe_name() -> String {
.unwrap_or(crate_name!().into())
}
/// Check whether there is enough space avaialble at the given `path` to store a file
/// with the given `size`.
/// Ensure that there is enough free disk space available at the given `path`,
/// to store a file with the given `size`.
///
/// If an error occurred while querying the file system,
/// the error is reported to the user, and `true` is returned.
/// the error is reported to the user and the method returns.
///
/// `false` is only returned when sure that there isn't enough space available.
/// If there is not enough disk space available,
/// an error is reported and the program will quit.
pub fn ensure_enough_space<P: AsRef<Path>>(path: P, size: u64) {
// Get the available space at this path
let space = match available_space(path) {
Ok(space) => space,
Err(err) => {
print_error(err.context("Failed to check available space on disk, ignoring"));
print_error(err.context("failed to check available space on disk, ignoring"));
return;
},
};
@ -570,15 +571,15 @@ pub fn ensure_enough_space<P: AsRef<Path>>(path: P, size: u64) {
// Create an info message giving details about the required space
let info = format!(
"{} is required, but only {} is available",
"{} of space required, but only {} is available",
format_bytes(size),
format_bytes(space),
);
// Print an descriptive error and quit
quit_error(
err_msg("Not enough disk space available in the target directory")
.context("Failed to download file"),
err_msg("not enough disk space available in the target directory")
.context("failed to download file"),
ErrorHintsBuilder::default()
.add_info(info)
.force(true)