pddl_ish_parser/parser/
parameter.rs1use regex::Regex;
2use crate::models::parser_error::ParserError;
3use super::error_context::get_error_context;
4
5#[derive(Debug, PartialEq, Clone)]
6pub struct Parameter {
7 pub name: String,
8 pub param_type: String,
9}
10
11pub fn extract_parameters(input: &str) -> Result<String, ParserError> {
12 let re = Regex::new(r":parameters\s*(?P<parameters>\(.*?\))").expect("Failed to compile parameters regex");
13 Ok(re
14 .captures(input)
15 .and_then(|caps| caps.name("parameters"))
16 .map(|m| m.as_str())
17 .ok_or_else(|| ParserError::new("Error parsing parameters".to_string(), get_error_context(input)))?
18 .to_string())
19}
20
21pub fn parse_parameters(input: &str) -> Result<Vec<Parameter>, ParserError> {
22 let re = Regex::new(r"\??\s*(\w+)\s*-\s*(\w+)").unwrap();
24 let mut parameters = Vec::new();
25
26 for caps in re.captures_iter(input) {
27 let name = caps.get(1).unwrap().as_str().to_string();
28 let param_type = caps.get(2).unwrap().as_str().to_string();
29 parameters.push(Parameter { name, param_type });
30 }
31
32 Ok(parameters)
33}