Check for unknown arguments and return an error message if any are found.
(cmd: &str, args: &serde_json::Value)
| 81 | |
| 82 | /// Check for unknown arguments and return an error message if any are found. |
| 83 | fn validate_args(cmd: &str, args: &serde_json::Value) -> Result<()> { |
| 84 | let known = known_args(cmd); |
| 85 | if let Some(obj) = args.as_object() { |
| 86 | let unknown: Vec<&String> = obj |
| 87 | .keys() |
| 88 | .filter(|k| { |
| 89 | let key = k.as_str(); |
| 90 | // dialog_action is handled globally for all page-level commands |
| 91 | if key == "dialog_action" && !is_browser_level(cmd) { |
| 92 | return false; |
| 93 | } |
| 94 | !known.contains(&key) |
| 95 | }) |
| 96 | .collect(); |
| 97 | if !unknown.is_empty() { |
| 98 | let unknown_names: Vec<&str> = unknown.iter().map(|s| s.as_str()).collect(); |
| 99 | bail!( |
| 100 | "Unknown argument(s) for '{}': {}. Expected: {}", |
| 101 | cmd, |
| 102 | unknown_names.join(", "), |
| 103 | known.join(", ") |
| 104 | ); |
| 105 | } |
| 106 | } |
| 107 | Ok(()) |
| 108 | } |
| 109 | |
| 110 | /// Whether a command operates at the browser level (no page session needed). |
| 111 | /// |
no test coverage detected