1use crackle_runtime::{CrackleTask, Kiln, ThermalProfile, TaskOutput};
4
5struct NumberTask {
6 value: f64,
7 name: String,
8}
9
10impl CrackleTask for NumberTask {
11 type Output = f64;
12
13 fn fire(&self) -> TaskOutput<Self::Output> {
14 TaskOutput::new(
15 self.value,
16 vec![
17 ("value".into(), self.value),
18 ("abs".into(), self.value.abs()),
19 ("squared".into(), self.value * self.value),
20 ],
21 )
22 }
23
24 fn label(&self) -> String {
25 self.name.clone()
26 }
27}
28
29fn main() {
30 let mut kiln = Kiln::new(ThermalProfile::fast_cooling());
31
32 kiln.fire_and_record(NumberTask { value: 2.0, name: "a".into() }).unwrap();
33 kiln.fire_and_record(NumberTask { value: 2.1, name: "b".into() }).unwrap();
34 kiln.fire_and_record(NumberTask { value: 9.8, name: "c".into() }).unwrap();
35 kiln.fire_and_record(NumberTask { value: 10.0, name: "d".into() }).unwrap();
36 kiln.fire_and_record(NumberTask { value: 2.2, name: "e".into() }).unwrap();
37
38 println!("Tasks in kiln: {}", kiln.task_count());
39
40 let patterns = kiln.cool();
41 println!("\nDetected {} pattern(s):\n", patterns.len());
42
43 for p in &patterns {
44 println!("[{}] {}", p.kind(), p.description());
45 println!(" confidence: {:.2}", p.confidence());
46 println!(" tasks: {:?}\n", p.involved_tasks());
47 }
48}