use base::Result;
use base::Sizable;
use base::Checkable;
use base::Datable;
use base::Serializable;
use util::Version;
use util::Timestamp;
use base::Stage;
#[derive(Clone, PartialEq, Eq, PartialOrd, Ord, Debug, Default, Hash, Serialize, Deserialize)]
pub struct Meta {
pub chain: String,
pub version: Version,
pub stage: Stage,
pub timestamp: Timestamp,
size: u64,
}
impl Meta {
pub fn new(chain: String,
version: Version,
stage: Stage)
-> Result<Meta>
{
version.check()?;
stage.check()?;
let timestamp = Timestamp::now()?;
let size = 0;
let meta = Meta { chain, version, stage, timestamp, size };
Ok(meta)
}
pub fn get_size(&self) -> u64 {
self.size
}
pub fn set_size(&mut self, size: u64) {
self.size = size;
}
}
impl Sizable for Meta {
fn size(&self) -> u64 {
self.chain.size() +
self.version.size() +
self.stage.size() +
self.timestamp.size() +
self.size.size()
}
}
impl Checkable for Meta {
fn check(&self) -> Result<()> {
self.version.check()?;
self.stage.check()
}
}
impl Datable for Meta {}
impl Serializable for Meta{}