pub mod block;
pub mod crypto;
pub mod header;
pub mod transaction;
pub mod types;
pub mod utils;
pub use types::*;
pub use utils::codec::{Decode, Encode};
pub type PrimitiveResult<T> = Result<T, PrimitiveError>;
#[derive(Debug, Clone, PartialEq, Eq)]
pub enum PrimitiveError {
InvalidFormat,
ValidationFailed(String),
CodecError(String),
CryptoError(String),
InvalidBlock(String),
SizeLimit(String),
InvalidTransaction(String),
InvalidHeader(String),
}
impl std::fmt::Display for PrimitiveError {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
match self {
PrimitiveError::InvalidFormat => write!(f, "Invalid data format"),
PrimitiveError::ValidationFailed(msg) => write!(f, "Validation failed: {}", msg),
PrimitiveError::CodecError(msg) => write!(f, "Codec error: {}", msg),
PrimitiveError::CryptoError(msg) => write!(f, "Crypto error: {}", msg),
PrimitiveError::InvalidBlock(msg) => write!(f, "Invalid block: {}", msg),
PrimitiveError::SizeLimit(msg) => write!(f, "Size limit exceeded: {}", msg),
PrimitiveError::InvalidTransaction(msg) => write!(f, "Invalid transaction: {}", msg),
PrimitiveError::InvalidHeader(msg) => write!(f, "Invalid header: {}", msg),
}
}
}
impl std::error::Error for PrimitiveError {}
pub trait Hashable {
fn hash(&self) -> Hash;
}
pub trait Validate {
fn validate(&self) -> PrimitiveResult<()>;
}
pub mod constants {
pub const MAX_BLOCK_SIZE: u32 = 4 * 1024 * 1024;
pub const MAX_CORES: u32 = 1023;
pub const MAX_ACCUMULATION_SIZE: u32 = 1024 * 1024; }
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn test_primitive_error_display() {
let err = PrimitiveError::ValidationFailed("test error".to_string());
assert_eq!(format!("{}", err), "Validation failed: test error");
}
}