use std::path::{Path as ActualPath, PathBuf}; #[derive(Clone, Debug)] pub struct Path(PathBuf); // FIXME: This is a specialization since with Path: Into // it would overwrite impl From for T //impl> From for Path { // fn from(v: T) -> Self { // Path(v.into()) // } //} macro_rules! path_from { ( $t:ty ) => { impl From<$t> for Path { fn from(v: $t) -> Self { Self(v.into()) } } }; } path_from!(String); path_from!(&str); path_from!(PathBuf); impl From for PathBuf { fn from(v: Path) -> Self { v.0 } } impl AsRef for Path { fn as_ref(&self) -> &ActualPath { &self.0 } } #[derive(Clone, Debug)] pub struct UserName(pub String); #[derive(Clone, Debug)] pub struct ServiceName(pub String); #[derive(Clone, Debug)] pub struct DatabaseName(pub String);