Add std::os::unix::fs::DirEntryExt2::file_name_ref(&self) -> &OsStr

DirEntryExt2 is a new trait with the same purpose as DirEntryExt,
but sealed
This commit is contained in:
Aaron Rennow 2021-03-27 14:25:52 -04:00
parent 5dc8789e30
commit bc45e474a0
2 changed files with 42 additions and 0 deletions

View File

@ -9,6 +9,8 @@ use crate::path::Path;
use crate::sys;
use crate::sys_common::{AsInner, AsInnerMut, FromInner};
// Used for `File::read` on intra-doc links
use crate::ffi::OsStr;
use crate::sealed::Sealed;
#[allow(unused_imports)]
use io::{Read, Write};
@ -839,6 +841,42 @@ impl DirEntryExt for fs::DirEntry {
}
}
/// Sealed Unix-specific extension methods for [`fs::DirEntry`].
#[unstable(feature = "dir_entry_ext2", issue = "85573")]
pub trait DirEntryExt2: Sealed {
/// Returns a reference to the underlying `OsStr` of this entry's filename.
///
/// # Examples
///
/// ```
/// use std::os::unix::fs::DirEntryExt2;
/// use std::{fs, io};
///
/// fn main() -> io::Result<()> {
/// let mut entries = fs::read_dir(".")?.collect::<Result<Vec<_>, io::Error>>()?;
/// entries.sort_unstable_by(|a, b| a.file_name_ref().cmp(b.file_name_ref()));
///
/// for p in entries {
/// println!("{:?}", p);
/// }
///
/// Ok(())
/// }
/// ```
fn file_name_ref(&self) -> &OsStr;
}
/// Allows extension traits within `std`.
#[unstable(feature = "sealed", issue = "none")]
impl Sealed for fs::DirEntry {}
#[unstable(feature = "dir_entry_ext2", issue = "85573")]
impl DirEntryExt2 for fs::DirEntry {
fn file_name_ref(&self) -> &OsStr {
self.as_inner().file_name_os_str()
}
}
/// Creates a new symbolic link on the filesystem.
///
/// The `link` path will be a symbolic link pointing to the `original` path.

View File

@ -647,6 +647,10 @@ impl DirEntry {
fn name_bytes(&self) -> &[u8] {
&*self.name
}
pub fn file_name_os_str(&self) -> &OsStr {
OsStr::from_bytes(self.name_bytes())
}
}
impl OpenOptions {