use std::borrow::Cow;
use std::path::PathBuf;
#[diagnostic::on_unimplemented(
message = "cannot map `{Self}` to `{Rt}` as this is not a safe mapping",
note = "make sure that the bincode encoding of both types are equivalent before implementing the necessary trait"
)]
pub trait SafeTypeMapping<Rt> {}
impl<'a> SafeTypeMapping<Cow<'a, str>> for String {}
impl<'a> SafeTypeMapping<Option<Cow<'a, str>>> for String {}
impl<'a> SafeTypeMapping<Vec<Cow<'a, str>>> for Vec<String> {}
impl<'a, T> SafeTypeMapping<Cow<'a, [T]>> for Vec<T> where [T]: ToOwned {}
impl<'a, T> SafeTypeMapping<Option<Cow<'a, [T]>>> for Vec<T> where [T]: ToOwned {}
impl<'a, T> SafeTypeMapping<Vec<Cow<'a, [T]>>> for Vec<Vec<T>> where [T]: ToOwned {}
impl SafeTypeMapping<PathBuf> for String {}
impl SafeTypeMapping<Option<PathBuf>> for String {}
impl SafeTypeMapping<Vec<PathBuf>> for Vec<String> {}
impl<T> SafeTypeMapping<T> for T {}
#[cfg(feature = "url2")]
impl SafeTypeMapping<url::Url> for String {}
#[cfg(feature = "url2")]
impl SafeTypeMapping<Option<url::Url>> for String {}
#[cfg(feature = "url2")]
impl SafeTypeMapping<Vec<url::Url>> for Vec<String> {}