use crate::serialise::SerialiseType;
#[derive(Debug, Clone)]
pub struct SerialString {
serialise_type: SerialiseType,
string: String,
}
impl SerialString {
#[must_use = "This creates a new SerialString instance but does nothing if unused"]
pub const fn new(serialise_type: SerialiseType, string: String) -> Self {
Self {
serialise_type,
string,
}
}
#[must_use = "This returns the serialization format but does nothing if unused"]
pub const fn get_serialise_type(&self) -> SerialiseType {
self.serialise_type
}
#[must_use = "This returns the serialized string but does nothing if unused"]
pub const fn get_string(&self) -> &String {
&self.string
}
}
impl std::fmt::Display for SerialString {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
write!(f, "{}", self.string)
}
}
#[macro_export]
macro_rules! try_from_serial_string {
($t:ty) => {
impl TryFrom<$t> for $crate::serialise::SerialString {
type Error = $crate::serialise::SerialiseError;
fn try_from(value: $t) -> Result<Self, $crate::serialise::SerialiseError> {
Ok(value.get_serialised())
}
}
};
}
#[macro_export]
macro_rules! try_to_serial_string {
($t:ty) => {
impl TryFrom<$crate::serialise::SerialString> for $t {
type Error = $crate::serialise::SerialiseError;
fn try_from(
value: $crate::serialise::SerialString,
) -> Result<Self, $crate::serialise::SerialiseError> {
Ok(Self::new(value))
}
}
};
}