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
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
pub type DatasetID = String;
pub type EntryID = String;
pub type SMILES = String;
pub type SMARTS = String;
pub type FPData = Vec<u32>;
pub type SerializedFormat = String;
pub type JobID = String;
pub trait Operator {
type InputType;
type DataType;
type OutputType;
type ReportType;
fn compute(&self, input: &Self::InputType, data: &Self::DataType) -> Self::OutputType;
fn report(&self, input: Self::InputType, data: &Self::DataType, output: Self::OutputType) -> Self::ReportType;
}
pub trait OperatorData {
fn len(&self) -> usize;
}
pub trait OperatorOutput {
fn blank() -> Self;
fn clear(&mut self);
fn len(&self) -> usize;
fn serialize(&self) -> String;
fn deserialize(content: &String) -> Self;
}
pub trait OperatorReport {
fn serialize(&self) -> String;
fn deserialize(content: &String) -> Self;
fn extend(&mut self, other: Self);
fn print(&self);
fn save(&self, filepath: &std::path::PathBuf) -> Result<u64, std::io::Error> {
std::fs::File::create(filepath)
.and_then(|mut dest| {
std::io::copy(&mut self.serialize().as_bytes(), &mut dest)
})
}
}
pub trait ComputingUnit {
fn compute(&mut self, serialized_input: &SerializedFormat);
fn report(&self, serialized_input: &SerializedFormat) -> SerializedFormat;
fn output_len(&self) -> usize;
}
pub mod kinds;
pub mod fs;
pub mod utils {
const ALPHABET: [char; 36] = [
'1', '2', '3', '4', '5', '6', '7', '8', '9', '0',
'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z'
];
pub fn generate_job_id() -> String {
nanoid::nanoid!(16, &ALPHABET)
}
pub fn generate_user_id() -> String {
nanoid::nanoid!(8, &ALPHABET)
}
}