pddl/types/
predicate_definitions.rs

1//! Provides predicate definitions.
2
3use crate::types::AtomicFormulaSkeleton;
4use std::ops::Deref;
5
6/// A set of predicate definitions.
7///
8/// ## Usage
9/// Used by [`Domain`](crate::Domain).
10#[derive(Debug, Default, Clone, Eq, PartialEq)]
11pub struct PredicateDefinitions(Vec<AtomicFormulaSkeleton>);
12
13impl PredicateDefinitions {
14    pub fn new<I: IntoIterator<Item = AtomicFormulaSkeleton>>(predicates: I) -> Self {
15        Self::from(predicates.into_iter().collect())
16    }
17
18    pub const fn from(predicates: Vec<AtomicFormulaSkeleton>) -> Self {
19        Self(predicates)
20    }
21
22    /// Gets the values.
23    pub fn values(&self) -> &[AtomicFormulaSkeleton] {
24        self.0.as_slice()
25    }
26}
27
28impl Deref for PredicateDefinitions {
29    type Target = [AtomicFormulaSkeleton];
30
31    fn deref(&self) -> &Self::Target {
32        self.0.as_slice()
33    }
34}
35
36impl From<Vec<AtomicFormulaSkeleton>> for PredicateDefinitions {
37    fn from(value: Vec<AtomicFormulaSkeleton>) -> Self {
38        PredicateDefinitions::new(value)
39    }
40}
41
42impl FromIterator<AtomicFormulaSkeleton> for PredicateDefinitions {
43    fn from_iter<T: IntoIterator<Item = AtomicFormulaSkeleton>>(iter: T) -> Self {
44        PredicateDefinitions::new(iter)
45    }
46}