use serde::{Deserialize, Serialize};
use crate::DIDWebVHError;
#[derive(Clone, Debug, Deserialize, Serialize, PartialEq)]
pub struct Witnesses {
pub threshold: u32,
pub witnesses: Vec<Witness>,
}
impl Witnesses {
pub fn is_empty(&self) -> bool {
self.witnesses.is_empty()
}
pub fn validate(&self) -> Result<(), DIDWebVHError> {
if self.is_empty() {
Err(DIDWebVHError::ValidationError(
"Witnesses are enabled, but no witness nodes are specified! Can not be empty!"
.to_string(),
))
} else if self.threshold < 1 {
Err(DIDWebVHError::ValidationError(
"Witness threshold must be 1 or more".to_string(),
))
} else if self.witnesses.len() < self.threshold as usize {
Err(DIDWebVHError::ValidationError(format!(
"Number of Witnesses ({}) is less than the threshold ({})",
self.witnesses.len(),
self.threshold
)))
} else {
Ok(())
}
}
}
#[derive(Clone, Debug, Deserialize, Eq, Hash, PartialEq, Serialize)]
pub struct Witness {
pub id: String,
}