use serde::{Deserialize, Serialize};
use serde_with::DeserializeFromStr;
use std::convert::From;
use std::str::FromStr;
mod entities_parser;
pub use entities_parser::{EntitiesParser, EntitiesParserError};
mod entity_ids_parser;
pub use entity_ids_parser::{EntityIdsParser, EntityIdsParserError};
#[derive(Debug, Clone, Deserialize, PartialEq)]
pub struct Entity {
pub liability: u64,
pub id: EntityId,
}
pub const ENTITY_ID_MAX_BYTES: usize = 64;
#[derive(PartialEq, Eq, Hash, Clone, Debug, DeserializeFromStr, Serialize)]
pub struct EntityId(String);
impl FromStr for EntityId {
type Err = EntityIdsParserError;
fn from_str(s: &str) -> Result<Self, Self::Err> {
if s.len() > ENTITY_ID_MAX_BYTES {
Err(Self::Err::EntityIdTooLongError { id: s.into() })
} else {
Ok(EntityId(s.into()))
}
}
}
impl From<EntityId> for Vec<u8> {
fn from(item: EntityId) -> Vec<u8> {
item.0.as_bytes().to_vec()
}
}
use std::fmt;
impl fmt::Display for EntityId {
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
f.write_str(&self.0)
}
}