mirror of
https://github.com/Drop-OSS/drop-app.git
synced 2025-11-09 20:12:14 +10:00
* chore: Progress on amend_settings command Signed-off-by: quexeky <git@quexeky.dev> * chore(errors): Progress on better error handling with segragation of files * chore: Progress on amend_settings command Signed-off-by: quexeky <git@quexeky.dev> * chore(commands): Separated commands under each subdirectory into respective commands.rs files Signed-off-by: quexeky <git@quexeky.dev> * chore(errors): Almost all errors and commands have been segregated * chore(errors): Added drop server error Signed-off-by: quexeky <git@quexeky.dev> * feat(core): Update to using nightly compiler Signed-off-by: quexeky <git@quexeky.dev> * chore(errors): More progress on error handling Signed-off-by: quexeky <git@quexeky.dev> * chore(errors): Implementing Try and FromResidual for UserValue Signed-off-by: quexeky <git@quexeky.dev> * refactor(errors): Segregated errors and commands from code, and made commands return UserValue struct Signed-off-by: quexeky <git@quexeky.dev> * fix(errors): Added missing files * chore(errors): Convert match statement to map_err * feat(settings): Implemented settings editing from UI * feat(errors): Clarified return values from retry_connect command * chore(errors): Moved autostart commands to autostart.rs * chore(process manager): Converted launch_process function for games to use game_id --------- Signed-off-by: quexeky <git@quexeky.dev>
69 lines
2.4 KiB
Rust
69 lines
2.4 KiB
Rust
use std::{
|
|
error::Error,
|
|
fmt::{Display, Formatter},
|
|
sync::Arc,
|
|
};
|
|
|
|
use http::StatusCode;
|
|
use url::ParseError;
|
|
|
|
use super::drop_server_error::DropServerError;
|
|
|
|
#[derive(Debug, Clone)]
|
|
pub enum RemoteAccessError {
|
|
FetchError(Arc<reqwest::Error>),
|
|
ParsingError(ParseError),
|
|
InvalidEndpoint,
|
|
HandshakeFailed(String),
|
|
GameNotFound,
|
|
InvalidResponse(DropServerError),
|
|
InvalidRedirect,
|
|
ManifestDownloadFailed(StatusCode, String),
|
|
OutOfSync,
|
|
Generic(String),
|
|
}
|
|
|
|
impl Display for RemoteAccessError {
|
|
fn fmt(&self, f: &mut Formatter<'_>) -> std::fmt::Result {
|
|
match self {
|
|
RemoteAccessError::FetchError(error) => write!(
|
|
f,
|
|
"{}: {}",
|
|
error,
|
|
error
|
|
.source()
|
|
.map(|e| e.to_string())
|
|
.or_else(|| Some("Unknown error".to_string()))
|
|
.unwrap()
|
|
),
|
|
RemoteAccessError::ParsingError(parse_error) => {
|
|
write!(f, "{}", parse_error)
|
|
}
|
|
RemoteAccessError::InvalidEndpoint => write!(f, "Invalid drop endpoint"),
|
|
RemoteAccessError::HandshakeFailed(message) => write!(f, "Failed to complete handshake: {}", message),
|
|
RemoteAccessError::GameNotFound => write!(f, "Could not find game on server"),
|
|
RemoteAccessError::InvalidResponse(error) => write!(f, "Server returned an invalid response: {} {}", error.status_code, error.status_message),
|
|
RemoteAccessError::InvalidRedirect => write!(f, "Server redirect was invalid"),
|
|
RemoteAccessError::ManifestDownloadFailed(status, response) => write!(
|
|
f,
|
|
"Failed to download game manifest: {} {}",
|
|
status, response
|
|
),
|
|
RemoteAccessError::OutOfSync => write!(f, "Server's and client's time are out of sync. Please ensure they are within at least 30 seconds of each other."),
|
|
RemoteAccessError::Generic(message) => write!(f, "{}", message),
|
|
}
|
|
}
|
|
}
|
|
|
|
impl From<reqwest::Error> for RemoteAccessError {
|
|
fn from(err: reqwest::Error) -> Self {
|
|
RemoteAccessError::FetchError(Arc::new(err))
|
|
}
|
|
}
|
|
impl From<ParseError> for RemoteAccessError {
|
|
fn from(err: ParseError) -> Self {
|
|
RemoteAccessError::ParsingError(err)
|
|
}
|
|
}
|
|
impl std::error::Error for RemoteAccessError {}
|