diff options
Diffstat (limited to '')
-rw-r--r-- | remote/error.rs | 61 |
1 files changed, 61 insertions, 0 deletions
diff --git a/remote/error.rs b/remote/error.rs new file mode 100644 index 0000000000..7f88735059 --- /dev/null +++ b/remote/error.rs @@ -0,0 +1,61 @@ +// This Source Code Form is subject to the terms of the Mozilla Public +// License, v. 2.0. If a copy of the MPL was not distributed with this +// file, You can obtain one at http://mozilla.org/MPL/2.0/. + +use std::num; + +use http; +use nserror::{ + nsresult, NS_ERROR_ILLEGAL_VALUE, NS_ERROR_INVALID_ARG, NS_ERROR_LAUNCHED_CHILD_PROCESS, + NS_ERROR_NOT_AVAILABLE, +}; +use thiserror::Error; + +#[derive(Debug, Error)] +pub enum RemoteAgentError { + #[error("expected address syntax [<host>]:<port>: {0}")] + AddressSpec(#[from] http::uri::InvalidUri), + + #[error("may only be instantiated in parent process")] + ChildProcess, + + #[error("invalid port: {0}")] + InvalidPort(#[from] num::ParseIntError), + + #[error("listener restricted to loopback devices")] + LoopbackRestricted, + + #[error("missing port number")] + MissingPort, + + #[error("unavailable")] + Unavailable, + + #[error("error result {0}")] + XpCom(#[source] nsresult), +} + +impl From<RemoteAgentError> for nsresult { + fn from(err: RemoteAgentError) -> nsresult { + use RemoteAgentError::*; + match err { + AddressSpec(_) | InvalidPort(_) => NS_ERROR_INVALID_ARG, + ChildProcess => NS_ERROR_LAUNCHED_CHILD_PROCESS, + LoopbackRestricted => NS_ERROR_ILLEGAL_VALUE, + MissingPort => NS_ERROR_INVALID_ARG, + Unavailable => NS_ERROR_NOT_AVAILABLE, + XpCom(result) => result, + } + } +} + +impl From<nsresult> for RemoteAgentError { + fn from(result: nsresult) -> Self { + use RemoteAgentError::*; + match result { + NS_ERROR_NOT_AVAILABLE => Unavailable, + NS_ERROR_LAUNCHED_CHILD_PROCESS => ChildProcess, + x => RemoteAgentError::XpCom(x), + } + } +} |