| use std::{ |
| ffi::OsStr, |
| fmt::{self, Write}, |
| path::Path, |
| }; |
| |
| pub(super) struct JoinOsStrs<'a, T> { |
| pub(super) slice: &'a [T], |
| pub(super) delimiter: char, |
| } |
| |
| impl<T> fmt::Display for JoinOsStrs<'_, T> |
| where |
| T: AsRef<OsStr>, |
| { |
| fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { |
| let len = self.slice.len(); |
| for (index, os_str) in self.slice.iter().enumerate() { |
| // TODO: Use OsStr::display once it is stablised, |
| // Path and OsStr has the same `Display` impl |
| write!(f, "{}", Path::new(os_str).display())?; |
| if index + 1 < len { |
| f.write_char(self.delimiter)?; |
| } |
| } |
| Ok(()) |
| } |
| } |
| |
| pub(super) struct OptionOsStrDisplay<T>(pub(super) Option<T>); |
| |
| impl<T> fmt::Display for OptionOsStrDisplay<T> |
| where |
| T: AsRef<OsStr>, |
| { |
| fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { |
| // TODO: Use OsStr::display once it is stablised |
| // Path and OsStr has the same `Display` impl |
| if let Some(os_str) = self.0.as_ref() { |
| write!(f, "Some({})", Path::new(os_str).display()) |
| } else { |
| f.write_str("None") |
| } |
| } |
| } |