rl_model/model/
postcondition.rs1use super::*;
2use crate::parser::*;
3use std::collections::HashMap;
4
5#[derive(Clone, Copy, PartialEq, Eq, Debug, Hash, Default)]
6pub struct PostconditionId(pub usize);
7impl Id for PostconditionId {
8 fn index(&self) -> usize {
9 self.0
10 }
11}
12
13#[derive(Debug, Clone)]
14pub struct Postcondition {
15 id: PostconditionId,
16 name: String,
17 expr: Expr,
18 position: Option<Position>,
19}
20
21impl Postcondition {
22 pub fn new<S: Into<String>>(name: S, expr: Expr, position: Option<Position>) -> Self {
23 let id = PostconditionId::default();
24 let name = name.into();
25 Self {
26 id,
27 name,
28 expr,
29 position,
30 }
31 }
32
33 pub fn expr(&self) -> &Expr {
34 &self.expr
35 }
36
37 pub fn resolve_resource(&mut self, map: &HashMap<String, ResourceId>) -> Result<(), RlError> {
40 self.expr.resolve_resource(map)
41 }
42
43 pub fn resolve_state(&mut self, map: &HashMap<String, StateId>) -> Result<(), RlError> {
44 self.expr.resolve_state(map)
45 }
46}
47
48impl Named<PostconditionId> for Postcondition {
49 fn id(&self) -> PostconditionId {
50 self.id
51 }
52
53 fn set_id(&mut self, id: PostconditionId) {
54 self.id = id;
55 }
56
57 fn name(&self) -> &str {
58 &self.name
59 }
60
61 fn position(&self) -> Option<Position> {
62 self.position.clone()
63 }
64}
65
66impl ToLang for Postcondition {
67 fn to_lang(&self, skillset: &Skillset) -> String {
68 format!("{}: {}", self.name, self.expr.to_lang(skillset))
69 }
70}
71
72impl std::fmt::Display for Postcondition {
73 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
74 write!(f, "{}", self.name)
75 }
76}