/* 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 https://mozilla.org/MPL/2.0/. */ use serde_json::Value; use webdriver::error::{ErrorStatus, WebDriverError, WebDriverResult}; pub(crate) struct TimeoutsConfiguration { pub script: Option, pub page_load: u64, pub implicit_wait: u64, } impl Default for TimeoutsConfiguration { fn default() -> Self { TimeoutsConfiguration { script: Some(30_000), page_load: 300_000, implicit_wait: 0, } } } /// pub(crate) fn deserialize_as_timeouts_configuration( timeouts: &Value, ) -> WebDriverResult { if let Value::Object(map) = timeouts { let mut config = TimeoutsConfiguration::default(); for (key, value) in map { match key.as_str() { "implicit" => { config.implicit_wait = value.as_f64().ok_or_else(|| { WebDriverError::new( ErrorStatus::InvalidArgument, "Invalid implicit timeout", ) })? as u64; }, "pageLoad" => { config.page_load = value.as_f64().ok_or_else(|| { WebDriverError::new( ErrorStatus::InvalidArgument, "Invalid page load timeout", ) })? as u64; }, "script" => { config.script = match value { Value::Null => None, _ => Some(value.as_f64().ok_or_else(|| { WebDriverError::new( ErrorStatus::InvalidArgument, "Invalid script timeout", ) })? as u64), }; }, _ => { return Err(WebDriverError::new( ErrorStatus::UnknownCommand, "Unknown timeout key", )); }, } } Ok(config) } else { Err(WebDriverError::new( ErrorStatus::InvalidArgument, "Expected an object for timeouts", )) } } pub(crate) fn serialize_timeouts_configuration(timeouts: &TimeoutsConfiguration) -> Value { let mut map = serde_json::Map::new(); map.insert("script".to_string(), Value::from(timeouts.script)); map.insert("pageLoad".to_string(), Value::from(timeouts.page_load)); map.insert("implicit".to_string(), Value::from(timeouts.implicit_wait)); Value::Object(map) }