pddl_parser/domain/
parameter.rs1use nom::branch::alt;
2use nom::combinator::map;
3use nom::multi::many0;
4use nom::IResult;
5use serde::{Deserialize, Serialize};
6
7use crate::error::ParserError;
8use crate::lexer::TokenStream;
9use crate::tokens::{id, var};
10
11#[derive(Debug, Deserialize, Serialize, Clone, PartialEq, Eq, PartialOrd, Ord, Hash)]
13pub struct Parameter(String);
14
15impl From<String> for Parameter {
16 fn from(s: String) -> Self {
17 Parameter(s)
18 }
19}
20
21impl From<&str> for Parameter {
22 fn from(s: &str) -> Self {
23 Parameter(s.to_string())
24 }
25}
26
27impl Parameter {
28 pub fn parse_parameters(input: TokenStream) -> IResult<TokenStream, Vec<Parameter>, ParserError> {
30 log::debug!("BEGIN > parse_parameters {:?}", input.span());
31 let (output, params) = many0(map(alt((id, var)), Into::into))(input)?;
32 log::debug!("END < parse_parameters {:?}", output.span());
33 Ok((output, params))
34 }
35
36 pub fn to_pddl(&self) -> String {
38 self.0.clone()
39 }
40}
41
42impl ToString for Parameter {
43 fn to_string(&self) -> String {
44 self.0.clone()
45 }
46}