canrun/goals/
succeed.rs

1use crate::core::State;
2use crate::goals::Goal;
3
4/** A [`Goal`] that always succeeds.
5
6# Example
7```
8use canrun::{Succeed, unify, Value, all, Query};
9
10let x = Value::var();
11let goal = all![unify(x.clone(), 1), Succeed];
12let result: Vec<_> = goal.query(x).collect();
13assert_eq!(result, vec![1])
14```
15*/
16#[derive(Debug)]
17pub struct Succeed;
18
19impl Goal for Succeed {
20    fn apply(&self, state: State) -> Option<State> {
21        Some(state)
22    }
23}
24
25#[cfg(test)]
26mod test {
27    use super::*;
28
29    #[test]
30    fn succeed() {
31        let state = State::new();
32        let goal = Succeed;
33        let result = goal.apply(state);
34        assert!(result.is_some());
35    }
36}