1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
use scoring::score;
use conformation::Pose;
pub fn get_protocol(protocol_name: &str) -> Protocol {
let protocol = Protocol {
components: vec![
Box::new(ScoreOnlyMove {}),
Box::new(GridMove {}),
Box::new(ScoreOnlyMove {}),
]
};
protocol
}
pub struct Protocol {
pub components: Vec<Box<Move>>,
}
impl Protocol {
pub fn run(&self, pose: &mut Pose) {
for component in self.components.iter() {
component.apply(pose);
}
}
}
pub trait Move {
fn apply(&self, pose: &mut Pose);
}
pub struct ScoreOnlyMove {}
pub struct GridMove {}
impl Move for ScoreOnlyMove {
fn apply(&self, pose: &mut Pose) {
let result: f64 = score(pose);
println!("ScoreOnlyMove: result is {}", result);
}
}
impl Move for GridMove {
fn apply(&self, pose: &mut Pose) {
println!("GridMove: activating grid");
}
}