conjure_cp_core/representation/
legacy.rs1use std::collections::BTreeMap;
2
3use core::fmt::Debug;
4
5use crate::{
8 ast::{DeclarationPtr, Expression, Literal, Name, SymbolTable},
9 rule_engine::ApplicationError,
10};
11
12pub trait Representation: Send + Sync + Debug {
13 fn init(name: &Name, symtab: &SymbolTable) -> Option<Self>
15 where
16 Self: Sized;
17
18 fn variable_name(&self) -> &Name;
20
21 fn value_down(&self, value: Literal) -> Result<BTreeMap<Name, Literal>, ApplicationError>;
23
24 fn value_up(&self, values: &BTreeMap<Name, Literal>) -> Result<Literal, ApplicationError>;
26
27 fn expression_down(
29 &self,
30 symtab: &SymbolTable,
31 ) -> Result<BTreeMap<Name, Expression>, ApplicationError>;
32
33 fn declaration_down(&self) -> Result<Vec<DeclarationPtr>, ApplicationError>;
35
36 fn repr_name(&self) -> &str;
38
39 fn repr_id(&self) -> super::ReprId;
41
42 fn box_clone(&self) -> Box<dyn Representation>;
44}
45
46impl Clone for Box<dyn Representation> {
47 fn clone(&self) -> Self {
48 self.box_clone()
49 }
50}