use std::ffi::OsStr;
use std::path::Path;
pub trait ToUtf8 {
fn to_utf8(&self) -> anyhow::Result<&str>;
}
impl ToUtf8 for OsStr {
fn to_utf8(&self) -> anyhow::Result<&str> {
self
.to_str()
.ok_or_else(|| anyhow::anyhow!("Unable to convert `{self:?}` to UTF-8 string"))
}
}
impl ToUtf8 for Path {
fn to_utf8(&self) -> anyhow::Result<&str> {
self.as_os_str().to_utf8()
}
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn test_os_str_to_utf8() -> anyhow::Result<()> {
let os_str = OsStr::new("hello");
assert_eq!(os_str.to_utf8()?, "hello");
Ok(())
}
#[test]
fn test_path_to_utf8() -> anyhow::Result<()> {
let path = Path::new("hello");
assert_eq!(path.to_utf8()?, "hello");
Ok(())
}
}