openapi_nexus_parser/
serde_error.rs1pub struct SerdeErrorExtractor<'a> {
5 error_msg: &'a str,
6}
7
8impl<'a> SerdeErrorExtractor<'a> {
9 pub fn new(error_msg: &'a str) -> Self {
11 Self { error_msg }
12 }
13
14 pub fn extract_location(&self) -> (usize, usize) {
17 let mut line = 0;
19 let mut column = 0;
20
21 if let Some(line_pos) = self.error_msg.find("line") {
23 let after_line = &self.error_msg[line_pos + 4..];
24 let after_whitespace = after_line.trim_start();
26 let num_end = after_whitespace
28 .char_indices()
29 .find(|(_, c)| !c.is_ascii_digit())
30 .map(|(i, _)| i)
31 .unwrap_or(after_whitespace.len());
32 if let Ok(parsed_line) = after_whitespace[..num_end].parse::<usize>() {
33 line = parsed_line;
34 }
35 }
36
37 if let Some(col_pos) = self.error_msg.find("column") {
39 let after_column = &self.error_msg[col_pos + 6..];
40 let after_whitespace = after_column.trim_start();
42 let num_end = after_whitespace
44 .char_indices()
45 .find(|(_, c)| !c.is_ascii_digit())
46 .map(|(i, _)| i)
47 .unwrap_or(after_whitespace.len());
48 if let Ok(parsed_column) = after_whitespace[..num_end].parse::<usize>() {
49 column = parsed_column;
50 }
51 }
52
53 (line, column)
54 }
55}