(value: &str)
| 159 | } |
| 160 | |
| 161 | fn parse_key_list(value: &str) -> Result<Vec<u16>, crate::error::AppError> { |
| 162 | let mut keys = Vec::new(); |
| 163 | for token in value |
| 164 | .split(',') |
| 165 | .map(str::trim) |
| 166 | .filter(|token| !token.is_empty()) |
| 167 | { |
| 168 | keys.push(parse_hid_key(token)?); |
| 169 | } |
| 170 | if keys.is_empty() { |
| 171 | return Err(crate::error::AppError::bad_request( |
| 172 | "Key sequence must include at least one key.", |
| 173 | )); |
| 174 | } |
| 175 | Ok(keys) |
| 176 | } |
| 177 | |
| 178 | fn parse_hid_key(value: &str) -> Result<u16, crate::error::AppError> { |
| 179 | if let Ok(code) = value.parse::<u16>() { |
no test coverage detected