use std::fmt::Display;
use std::fmt::Formatter;
use std::fmt::Result as FmtResult;
use crate::error::FsError;
use crate::error::FsErrorKind;
use crate::error::FsOperation;
use crate::error::FsResult;
#[derive(Clone, Debug, Eq, Hash, Ord, PartialEq, PartialOrd)]
pub struct FileSystemId(
Box<str>,
);
impl FileSystemId {
pub fn new(id: &str) -> FsResult<Self> {
if id.is_empty() || id.chars().any(char::is_control) {
return Err(FsError::new(
FsErrorKind::InvalidOptions,
FsOperation::Provider,
"filesystem id must be non-empty and contain no controls",
));
}
Ok(Self(id.into()))
}
#[inline]
#[must_use]
pub fn as_str(&self) -> &str {
&self.0
}
}
impl Display for FileSystemId {
#[inline]
fn fmt(&self, formatter: &mut Formatter<'_>) -> FmtResult {
formatter.write_str(self.as_str())
}
}