tor-browser

The Tor Browser
git clone https://git.dasho.dev/tor-browser.git
Log | Files | Refs | README | LICENSE

error.rs (4414B)


      1 /* This Source Code Form is subject to the terms of the Mozilla Public
      2 * License, v. 2.0. If a copy of the MPL was not distributed with this
      3 * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
      4 
      5 use std::fmt;
      6 
      7 use serde::{Deserialize, Serialize};
      8 
      9 #[derive(Clone, Debug, Eq, Hash, Ord, PartialEq, PartialOrd, Serialize, Deserialize)]
     10 pub struct MarionetteError {
     11    #[serde(rename = "error")]
     12    pub kind: ErrorKind,
     13    #[serde(default = "empty_string")]
     14    pub message: String,
     15    #[serde(rename = "stacktrace", default = "empty_string")]
     16    pub stack: String,
     17 }
     18 
     19 fn empty_string() -> String {
     20    "".to_owned()
     21 }
     22 
     23 #[derive(Clone, Copy, Debug, Eq, Hash, Ord, PartialEq, PartialOrd, Serialize, Deserialize)]
     24 pub enum ErrorKind {
     25    #[serde(rename = "element click intercepted")]
     26    ElementClickIntercepted,
     27    #[serde(rename = "element not accessible")]
     28    ElementNotAccessible,
     29    #[serde(rename = "element not interactable")]
     30    ElementNotInteractable,
     31    #[serde(rename = "insecure certificate")]
     32    InsecureCertificate,
     33    #[serde(rename = "invalid argument")]
     34    InvalidArgument,
     35    #[serde(rename = "invalid cookie")]
     36    InvalidCookieDomain,
     37    #[serde(rename = "invalid element state")]
     38    InvalidElementState,
     39    #[serde(rename = "invalid selector")]
     40    InvalidSelector,
     41    #[serde(rename = "invalid session id")]
     42    InvalidSessionId,
     43    #[serde(rename = "javascript error")]
     44    JavaScript,
     45    #[serde(rename = "move target out of bounds")]
     46    MoveTargetOutOfBounds,
     47    #[serde(rename = "no such alert")]
     48    NoSuchAlert,
     49    #[serde(rename = "no such element")]
     50    NoSuchElement,
     51    #[serde(rename = "no such frame")]
     52    NoSuchFrame,
     53    #[serde(rename = "no such window")]
     54    NoSuchWindow,
     55    #[serde(rename = "script timeout")]
     56    ScriptTimeout,
     57    #[serde(rename = "session not created")]
     58    SessionNotCreated,
     59    #[serde(rename = "stale element reference")]
     60    StaleElementReference,
     61    #[serde(rename = "timeout")]
     62    Timeout,
     63    #[serde(rename = "unable to set cookie")]
     64    UnableToSetCookie,
     65    #[serde(rename = "unexpected alert open")]
     66    UnexpectedAlertOpen,
     67    #[serde(rename = "unknown command")]
     68    UnknownCommand,
     69    #[serde(rename = "unknown error")]
     70    Unknown,
     71    #[serde(rename = "unsupported operation")]
     72    UnsupportedOperation,
     73    #[serde(rename = "webdriver error")]
     74    WebDriver,
     75 }
     76 
     77 impl ErrorKind {
     78    pub(crate) fn as_str(self) -> &'static str {
     79        use ErrorKind::*;
     80        match self {
     81            ElementClickIntercepted => "element click intercepted",
     82            ElementNotAccessible => "element not accessible",
     83            ElementNotInteractable => "element not interactable",
     84            InsecureCertificate => "insecure certificate",
     85            InvalidArgument => "invalid argument",
     86            InvalidCookieDomain => "invalid cookie",
     87            InvalidElementState => "invalid element state",
     88            InvalidSelector => "invalid selector",
     89            InvalidSessionId => "invalid session id",
     90            JavaScript => "javascript error",
     91            MoveTargetOutOfBounds => "move target out of bounds",
     92            NoSuchAlert => "no such alert",
     93            NoSuchElement => "no such element",
     94            NoSuchFrame => "no such frame",
     95            NoSuchWindow => "no such window",
     96            ScriptTimeout => "script timeout",
     97            SessionNotCreated => "session not created",
     98            StaleElementReference => "stale eelement referencee",
     99            Timeout => "timeout",
    100            UnableToSetCookie => "unable to set cookie",
    101            UnexpectedAlertOpen => "unexpected alert open",
    102            UnknownCommand => "unknown command",
    103            Unknown => "unknown error",
    104            UnsupportedOperation => "unsupported operation",
    105            WebDriver => "webdriver error",
    106        }
    107    }
    108 }
    109 
    110 impl fmt::Display for ErrorKind {
    111    fn fmt(&self, fmt: &mut fmt::Formatter) -> fmt::Result {
    112        write!(fmt, "{}", self.as_str())
    113    }
    114 }
    115 
    116 #[cfg(test)]
    117 mod tests {
    118    use super::*;
    119    use crate::test::assert_ser_de;
    120    use serde_json::json;
    121 
    122    #[test]
    123    fn test_json_error() {
    124        let err = MarionetteError {
    125            kind: ErrorKind::Timeout,
    126            message: "".into(),
    127            stack: "".into(),
    128        };
    129        assert_ser_de(
    130            &err,
    131            json!({"error": "timeout", "message": "", "stacktrace": ""}),
    132        );
    133    }
    134 }