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 }