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
87
88
89
90
91
92
use holochain_core_types::{
cas::content::Address, error::HolochainError, validation::ValidationPackage,
};
use holochain_dna::Dna;
use nucleus::ZomeFnCall;
use snowflake;
use std::collections::HashMap;
#[derive(Clone, Debug, PartialEq)]
pub enum NucleusStatus {
New,
Initializing,
Initialized,
InitializationFailed(String),
}
impl Default for NucleusStatus {
fn default() -> Self {
NucleusStatus::New
}
}
pub type ValidationResult = Result<(), String>;
#[derive(Clone, Debug, PartialEq, Default)]
pub struct NucleusState {
pub dna: Option<Dna>,
pub status: NucleusStatus,
pub zome_calls: HashMap<ZomeFnCall, Option<Result<String, HolochainError>>>,
pub validation_results: HashMap<(snowflake::ProcessUniqueId, Address), ValidationResult>,
pub validation_packages:
HashMap<snowflake::ProcessUniqueId, Result<ValidationPackage, HolochainError>>,
}
impl NucleusState {
pub fn new() -> Self {
NucleusState {
dna: None,
status: NucleusStatus::New,
zome_calls: HashMap::new(),
validation_results: HashMap::new(),
validation_packages: HashMap::new(),
}
}
pub fn zome_call_result(
&self,
zome_call: &ZomeFnCall,
) -> Option<Result<String, HolochainError>> {
match self.zome_calls.get(zome_call) {
None => None,
Some(value) => value.clone(),
}
}
pub fn has_initialized(&self) -> bool {
self.status == NucleusStatus::Initialized
}
pub fn has_initialization_failed(&self) -> bool {
match self.status {
NucleusStatus::InitializationFailed(_) => true,
_ => false,
}
}
pub fn dna(&self) -> Option<Dna> {
self.dna.clone()
}
pub fn status(&self) -> NucleusStatus {
self.status.clone()
}
}
#[cfg(test)]
pub mod tests {
use super::NucleusState;
pub fn test_nucleus_state() -> NucleusState {
NucleusState::new()
}
}