use crate::utils::{str_to_bytes, bytes_to_str, validate_allowed_name};
use crate::datatype::Datatype;
use crate::list::ListKeyTrait;
const MAX_NAME_SIZE: usize = 256;
type NameType = [u8; MAX_NAME_SIZE];
#[derive(Clone, Debug)]
pub struct FeedItem {
pub name: NameType,
pub size: usize,
}
impl ListKeyTrait<String> for FeedItem {
fn key(&self) -> String {
bytes_to_str(&self.name).to_string()
}
}
impl FeedItem {
pub fn new(name: &str) -> std::io::Result<Self> {
validate_allowed_name(name)?;
Ok(Self {
name: str_to_bytes::<MAX_NAME_SIZE>(name),
size: 0,
})
}
pub fn get_name(&self) -> String {
bytes_to_str(&self.name).to_string()
}
pub fn rename(&mut self, name: &str) -> std::io::Result<()> {
validate_allowed_name(name)?;
self.name = str_to_bytes::<MAX_NAME_SIZE>(name);
Ok(())
}
}
#[derive(Clone, Eq, PartialEq, Debug)]
pub struct ColItem {
pub name: NameType,
pub datatype: Datatype,
}
impl ListKeyTrait<String> for ColItem {
fn key(&self) -> String {
bytes_to_str(&self.name).to_string()
}
}
impl ColItem {
pub fn new(name: &str, datatype: &str) -> std::io::Result<Self> {
validate_allowed_name(name)?;
Ok(Self {
name: str_to_bytes::<MAX_NAME_SIZE>(name),
datatype: datatype.parse().unwrap(),
})
}
pub fn get_name(&self) -> String {
bytes_to_str(&self.name).to_string()
}
pub fn get_datatype(&self) -> String {
self.datatype.to_string()
}
pub fn rename(&mut self, name: &str) -> std::io::Result<()> {
validate_allowed_name(name)?;
self.name = str_to_bytes::<MAX_NAME_SIZE>(name);
Ok(())
}
}