use crate::Debug;
#[doc = crate::_tags!(value)]
#[doc = crate::_doc_location!("data/table/value")]
pub trait DataType: Debug {
type Value: DataValue;
fn data_values_are_copy() -> bool;
fn data_value_is_copy(&self) -> bool;
fn data_value_default(&self) -> Option<Self::Value>;
fn data_value_align(&self) -> usize;
fn data_value_size(&self) -> usize;
}
#[doc = crate::_tags!(value)]
#[doc = crate::_doc_location!("data/table/value")]
pub trait DataTypeCopy: DataType + Copy
where
Self::Value: DataValueCopy,
{
fn data_value_copy_default(&self) -> Option<Self::Value> {
self.data_value_default()
}
}
#[doc = crate::_tags!(value)]
#[doc = crate::_doc_location!("data/table/value")]
pub trait DataValue: Debug {
type Type: DataType;
fn data_values_are_copy() -> bool;
fn data_type(&self) -> Self::Type;
fn data_value_is_copy(&self) -> bool;
}
#[doc = crate::_tags!(value)]
#[doc = crate::_doc_location!("data/table/value")]
pub trait DataValueCopy: DataValue + Copy {
fn data_type_copy(&self) -> Self::Type {
self.data_type()
}
}
#[doc = crate::_tags!(value)]
#[doc = crate::_doc_location!("data/table/value")]
#[cfg(all(not(feature = "safe_data"), feature = "unsafe_layout"))]
#[cfg_attr(nightly_doc, doc(cfg(feature = "unsafe_layout")))]
pub unsafe trait DataRaw {}
#[doc = crate::_tags!(value)]
#[doc = crate::_doc_location!("data/table/value")]
#[cfg(all(not(feature = "safe_data"), feature = "unsafe_layout"))]
#[cfg_attr(nightly_doc, doc(cfg(feature = "unsafe_layout")))]
pub unsafe trait DataRawCopy: DataRaw + Copy {}