scopegraphs_lib/resolve/
params.rs1use crate::resolve::EdgeOrData;
2
3pub trait DataWellformedness<DATA> {
7 fn data_wf(&self, data: &DATA) -> bool;
8}
9
10impl<DATA, T> DataWellformedness<DATA> for T
11where
12 for<'sg> T: Fn(&'sg DATA) -> bool,
13{
14 fn data_wf(&self, data: &DATA) -> bool {
15 self(data)
16 }
17}
18
19#[derive(Default)]
20pub struct DefaultDataWellformedness {}
21
22impl<DATA> DataWellformedness<DATA> for DefaultDataWellformedness {
23 fn data_wf(&self, _data: &DATA) -> bool {
24 true }
26}
27
28pub trait LabelOrder<LABEL> {
37 fn less_than(&self, l1: &EdgeOrData<LABEL>, l2: &EdgeOrData<LABEL>) -> bool;
38}
39impl<LABEL, T> LabelOrder<LABEL> for T
40where
41 T: for<'a, 'b> Fn(&'a EdgeOrData<LABEL>, &'b EdgeOrData<LABEL>) -> bool,
42{
43 fn less_than(&self, l1: &EdgeOrData<LABEL>, l2: &EdgeOrData<LABEL>) -> bool {
44 self(l1, l2)
45 }
46}
47
48#[derive(Default)]
49pub struct DefaultLabelOrder {}
50
51impl<LABEL> LabelOrder<LABEL> for DefaultLabelOrder {
52 fn less_than(&self, _l1: &EdgeOrData<LABEL>, _l2: &EdgeOrData<LABEL>) -> bool {
53 false }
55}
56
57pub trait DataEquiv<DATA> {
63 fn data_equiv(&self, d1: &DATA, d2: &DATA) -> bool;
64
65 fn always_true(&self) -> bool {
66 false
67 }
68}
69
70impl<DATA, T> DataEquiv<DATA> for T
71where
72 for<'sg> T: Fn(&'sg DATA, &'sg DATA) -> bool,
73{
74 fn data_equiv(&self, d1: &DATA, d2: &DATA) -> bool {
75 self(d1, d2)
76 }
77}
78
79#[derive(Default)]
80pub struct DefaultDataEquiv {}
81
82impl<DATA> DataEquiv<DATA> for DefaultDataEquiv {
83 fn data_equiv(&self, _d1: &DATA, _d2: &DATA) -> bool {
84 true }
86
87 fn always_true(&self) -> bool {
88 true
89 }
90}