diff --git a/library/std/src/fs.rs b/library/std/src/fs.rs index 4310e10830380..71bc17d0f94f6 100644 --- a/library/std/src/fs.rs +++ b/library/std/src/fs.rs @@ -111,6 +111,10 @@ pub struct File { #[derive(Clone)] pub struct Metadata(fs_imp::FileAttr); +/// Allows extension traits within `std`. +#[unstable(feature = "sealed", issue = "none")] +impl crate::sealed::Sealed for Metadata {} + /// Iterator over the entries in a directory. /// /// This iterator is returned from the [`read_dir`] function of this module and diff --git a/library/std/src/os/aix/fs.rs b/library/std/src/os/aix/fs.rs index ac9dd45f05426..bb062f4394bf8 100644 --- a/library/std/src/os/aix/fs.rs +++ b/library/std/src/os/aix/fs.rs @@ -5,13 +5,14 @@ #![stable(feature = "metadata_ext", since = "1.1.0")] use crate::fs::Metadata; +use crate::sealed::Sealed; use crate::sys_common::AsInner; /// OS-specific extensions to [`fs::Metadata`]. /// /// [`fs::Metadata`]: crate::fs::Metadata #[stable(feature = "metadata_ext", since = "1.1.0")] -pub trait MetadataExt { +pub trait MetadataExt: Sealed { /// Returns the device ID on which this file resides. /// /// # Examples diff --git a/library/std/src/os/android/fs.rs b/library/std/src/os/android/fs.rs index 1beb3cf6e84b5..abd70775cbc93 100644 --- a/library/std/src/os/android/fs.rs +++ b/library/std/src/os/android/fs.rs @@ -1,6 +1,7 @@ #![stable(feature = "metadata_ext", since = "1.1.0")] use crate::fs::Metadata; +use crate::sealed::Sealed; use crate::sys_common::AsInner; #[allow(deprecated)] @@ -10,7 +11,7 @@ use crate::os::android::raw; /// /// [`fs::Metadata`]: crate::fs::Metadata #[stable(feature = "metadata_ext", since = "1.1.0")] -pub trait MetadataExt { +pub trait MetadataExt: Sealed { /// Gain a reference to the underlying `stat` structure which contains /// the raw information returned by the OS. /// diff --git a/library/std/src/os/dragonfly/fs.rs b/library/std/src/os/dragonfly/fs.rs index 1424fc4c69880..c50d2b8e55070 100644 --- a/library/std/src/os/dragonfly/fs.rs +++ b/library/std/src/os/dragonfly/fs.rs @@ -1,6 +1,7 @@ #![stable(feature = "metadata_ext", since = "1.1.0")] use crate::fs::Metadata; +use crate::sealed::Sealed; use crate::sys_common::AsInner; #[allow(deprecated)] @@ -10,7 +11,7 @@ use crate::os::dragonfly::raw; /// /// [`fs::Metadata`]: crate::fs::Metadata #[stable(feature = "metadata_ext", since = "1.1.0")] -pub trait MetadataExt { +pub trait MetadataExt: Sealed { /// Gain a reference to the underlying `stat` structure which contains /// the raw information returned by the OS. /// diff --git a/library/std/src/os/emscripten/fs.rs b/library/std/src/os/emscripten/fs.rs index d5ec8e03c00d1..ae4aa5c16a8b1 100644 --- a/library/std/src/os/emscripten/fs.rs +++ b/library/std/src/os/emscripten/fs.rs @@ -1,6 +1,7 @@ #![stable(feature = "metadata_ext", since = "1.1.0")] use crate::fs::Metadata; +use crate::sealed::Sealed; use crate::sys_common::AsInner; #[allow(deprecated)] @@ -10,7 +11,7 @@ use crate::os::emscripten::raw; /// /// [`fs::Metadata`]: crate::fs::Metadata #[stable(feature = "metadata_ext", since = "1.1.0")] -pub trait MetadataExt { +pub trait MetadataExt: Sealed { /// Gain a reference to the underlying `stat` structure which contains /// the raw information returned by the OS. /// diff --git a/library/std/src/os/espidf/fs.rs b/library/std/src/os/espidf/fs.rs index 88701dafe20ce..3d804a6fd465a 100644 --- a/library/std/src/os/espidf/fs.rs +++ b/library/std/src/os/espidf/fs.rs @@ -1,6 +1,7 @@ #![stable(feature = "metadata_ext", since = "1.1.0")] use crate::fs::Metadata; +use crate::sealed::Sealed; use crate::sys_common::AsInner; #[allow(deprecated)] @@ -10,7 +11,7 @@ use crate::os::espidf::raw; /// /// [`fs::Metadata`]: crate::fs::Metadata #[stable(feature = "metadata_ext", since = "1.1.0")] -pub trait MetadataExt { +pub trait MetadataExt: Sealed { #[stable(feature = "metadata_ext", since = "1.1.0")] #[deprecated( since = "1.8.0", diff --git a/library/std/src/os/freebsd/fs.rs b/library/std/src/os/freebsd/fs.rs index 5689a82e00a34..124a083a3f812 100644 --- a/library/std/src/os/freebsd/fs.rs +++ b/library/std/src/os/freebsd/fs.rs @@ -1,6 +1,7 @@ #![stable(feature = "metadata_ext", since = "1.1.0")] use crate::fs::Metadata; +use crate::sealed::Sealed; use crate::sys_common::AsInner; #[allow(deprecated)] @@ -10,7 +11,7 @@ use crate::os::freebsd::raw; /// /// [`fs::Metadata`]: crate::fs::Metadata #[stable(feature = "metadata_ext", since = "1.1.0")] -pub trait MetadataExt { +pub trait MetadataExt: Sealed { /// Gain a reference to the underlying `stat` structure which contains /// the raw information returned by the OS. /// diff --git a/library/std/src/os/fuchsia/fs.rs b/library/std/src/os/fuchsia/fs.rs index b48a46f9124a9..a2da22f6cec3f 100644 --- a/library/std/src/os/fuchsia/fs.rs +++ b/library/std/src/os/fuchsia/fs.rs @@ -1,13 +1,14 @@ #![stable(feature = "metadata_ext", since = "1.1.0")] use crate::fs::Metadata; +use crate::sealed::Sealed; use crate::sys_common::AsInner; /// OS-specific extensions to [`fs::Metadata`]. /// /// [`fs::Metadata`]: crate::fs::Metadata #[stable(feature = "metadata_ext", since = "1.1.0")] -pub trait MetadataExt { +pub trait MetadataExt: Sealed { #[stable(feature = "metadata_ext2", since = "1.8.0")] fn st_dev(&self) -> u64; #[stable(feature = "metadata_ext2", since = "1.8.0")] diff --git a/library/std/src/os/haiku/fs.rs b/library/std/src/os/haiku/fs.rs index a23a2af8f6e7b..0f5409d210f47 100644 --- a/library/std/src/os/haiku/fs.rs +++ b/library/std/src/os/haiku/fs.rs @@ -1,6 +1,7 @@ #![stable(feature = "metadata_ext", since = "1.1.0")] use crate::fs::Metadata; +use crate::sealed::Sealed; use crate::sys_common::AsInner; #[allow(deprecated)] @@ -10,7 +11,7 @@ use crate::os::haiku::raw; /// /// [`fs::Metadata`]: crate::fs::Metadata #[stable(feature = "metadata_ext", since = "1.1.0")] -pub trait MetadataExt { +pub trait MetadataExt: Sealed { /// Gain a reference to the underlying `stat` structure which contains /// the raw information returned by the OS. /// diff --git a/library/std/src/os/horizon/fs.rs b/library/std/src/os/horizon/fs.rs index 1325522105dc8..6dcbe6a3de4c3 100644 --- a/library/std/src/os/horizon/fs.rs +++ b/library/std/src/os/horizon/fs.rs @@ -1,13 +1,14 @@ #![stable(feature = "metadata_ext", since = "1.1.0")] use crate::fs::Metadata; +use crate::sealed::Sealed; use crate::sys_common::AsInner; /// OS-specific extensions to [`fs::Metadata`]. /// /// [`fs::Metadata`]: crate::fs::Metadata #[stable(feature = "metadata_ext", since = "1.1.0")] -pub trait MetadataExt { +pub trait MetadataExt: Sealed { #[stable(feature = "metadata_ext2", since = "1.8.0")] fn st_dev(&self) -> u64; #[stable(feature = "metadata_ext2", since = "1.8.0")] diff --git a/library/std/src/os/hurd/fs.rs b/library/std/src/os/hurd/fs.rs index 00ff1560f31d9..f8a5b5fdf5e3c 100644 --- a/library/std/src/os/hurd/fs.rs +++ b/library/std/src/os/hurd/fs.rs @@ -5,13 +5,14 @@ #![stable(feature = "metadata_ext", since = "1.1.0")] use crate::fs::Metadata; +use crate::sealed::Sealed; use crate::sys_common::AsInner; /// OS-specific extensions to [`fs::Metadata`]. /// /// [`fs::Metadata`]: crate::fs::Metadata #[stable(feature = "metadata_ext", since = "1.1.0")] -pub trait MetadataExt { +pub trait MetadataExt: Sealed { /// Returns the device ID on which this file resides. /// /// # Examples diff --git a/library/std/src/os/illumos/fs.rs b/library/std/src/os/illumos/fs.rs index 63be48b8131b2..855d80483d9ac 100644 --- a/library/std/src/os/illumos/fs.rs +++ b/library/std/src/os/illumos/fs.rs @@ -1,6 +1,7 @@ #![stable(feature = "metadata_ext", since = "1.1.0")] use crate::fs::Metadata; +use crate::sealed::Sealed; use crate::sys_common::AsInner; #[allow(deprecated)] @@ -10,7 +11,7 @@ use crate::os::illumos::raw; /// /// [`fs::Metadata`]: crate::fs::Metadata #[stable(feature = "metadata_ext", since = "1.1.0")] -pub trait MetadataExt { +pub trait MetadataExt: Sealed { /// Gain a reference to the underlying `stat` structure which contains /// the raw information returned by the OS. /// diff --git a/library/std/src/os/ios/fs.rs b/library/std/src/os/ios/fs.rs index e5df4de0b7f71..7c50a720964a5 100644 --- a/library/std/src/os/ios/fs.rs +++ b/library/std/src/os/ios/fs.rs @@ -12,7 +12,7 @@ use super::raw; /// /// [`fs::Metadata`]: crate::fs::Metadata #[stable(feature = "metadata_ext", since = "1.1.0")] -pub trait MetadataExt { +pub trait MetadataExt: Sealed { /// Gain a reference to the underlying `stat` structure which contains /// the raw information returned by the OS. /// diff --git a/library/std/src/os/l4re/fs.rs b/library/std/src/os/l4re/fs.rs index 6d6a535b1e831..009ed2070a43a 100644 --- a/library/std/src/os/l4re/fs.rs +++ b/library/std/src/os/l4re/fs.rs @@ -5,6 +5,7 @@ #![stable(feature = "metadata_ext", since = "1.1.0")] use crate::fs::Metadata; +use crate::sealed::Sealed; use crate::sys_common::AsInner; #[allow(deprecated)] @@ -14,7 +15,7 @@ use crate::os::l4re::raw; /// /// [`fs::Metadata`]: crate::fs::Metadata #[stable(feature = "metadata_ext", since = "1.1.0")] -pub trait MetadataExt { +pub trait MetadataExt: Sealed { /// Gain a reference to the underlying `stat` structure which contains /// the raw information returned by the OS. /// diff --git a/library/std/src/os/linux/fs.rs b/library/std/src/os/linux/fs.rs index ab0b2a3eda3f5..2d52b7e7e7086 100644 --- a/library/std/src/os/linux/fs.rs +++ b/library/std/src/os/linux/fs.rs @@ -5,6 +5,7 @@ #![stable(feature = "metadata_ext", since = "1.1.0")] use crate::fs::Metadata; +use crate::sealed::Sealed; use crate::sys_common::AsInner; #[allow(deprecated)] @@ -14,7 +15,7 @@ use crate::os::linux::raw; /// /// [`fs::Metadata`]: crate::fs::Metadata #[stable(feature = "metadata_ext", since = "1.1.0")] -pub trait MetadataExt { +pub trait MetadataExt: Sealed { /// Gain a reference to the underlying `stat` structure which contains /// the raw information returned by the OS. /// diff --git a/library/std/src/os/macos/fs.rs b/library/std/src/os/macos/fs.rs index 573426d1a8646..1cd14c989f240 100644 --- a/library/std/src/os/macos/fs.rs +++ b/library/std/src/os/macos/fs.rs @@ -12,7 +12,7 @@ use crate::os::macos::raw; /// /// [`fs::Metadata`]: crate::fs::Metadata #[stable(feature = "metadata_ext", since = "1.1.0")] -pub trait MetadataExt { +pub trait MetadataExt: Sealed { /// Gain a reference to the underlying `stat` structure which contains /// the raw information returned by the OS. /// diff --git a/library/std/src/os/netbsd/fs.rs b/library/std/src/os/netbsd/fs.rs index fe0be069e5e3f..9c20fe854e2db 100644 --- a/library/std/src/os/netbsd/fs.rs +++ b/library/std/src/os/netbsd/fs.rs @@ -1,6 +1,7 @@ #![stable(feature = "metadata_ext", since = "1.1.0")] use crate::fs::Metadata; +use crate::sealed::Sealed; use crate::sys_common::AsInner; #[allow(deprecated)] @@ -10,7 +11,7 @@ use crate::os::netbsd::raw; /// /// [`fs::Metadata`]: crate::fs::Metadata #[stable(feature = "metadata_ext", since = "1.1.0")] -pub trait MetadataExt { +pub trait MetadataExt: Sealed { /// Gain a reference to the underlying `stat` structure which contains /// the raw information returned by the OS. /// diff --git a/library/std/src/os/nto/fs.rs b/library/std/src/os/nto/fs.rs index 8f915b08c9e2e..caa0d8c9565d2 100644 --- a/library/std/src/os/nto/fs.rs +++ b/library/std/src/os/nto/fs.rs @@ -1,10 +1,11 @@ #![stable(feature = "metadata_ext", since = "1.1.0")] use crate::fs::Metadata; +use crate::sealed::Sealed; use crate::sys_common::AsInner; #[stable(feature = "metadata_ext", since = "1.1.0")] -pub trait MetadataExt { +pub trait MetadataExt: Sealed { #[stable(feature = "metadata_ext2", since = "1.8.0")] fn st_dev(&self) -> u64; #[stable(feature = "metadata_ext2", since = "1.8.0")] diff --git a/library/std/src/os/openbsd/fs.rs b/library/std/src/os/openbsd/fs.rs index b8d8d31c5b8cf..0474d06bd8849 100644 --- a/library/std/src/os/openbsd/fs.rs +++ b/library/std/src/os/openbsd/fs.rs @@ -1,6 +1,7 @@ #![stable(feature = "metadata_ext", since = "1.1.0")] use crate::fs::Metadata; +use crate::sealed::Sealed; use crate::sys_common::AsInner; #[allow(deprecated)] @@ -10,7 +11,7 @@ use crate::os::openbsd::raw; /// /// [`fs::Metadata`]: crate::fs::Metadata #[stable(feature = "metadata_ext", since = "1.1.0")] -pub trait MetadataExt { +pub trait MetadataExt: Sealed { /// Gain a reference to the underlying `stat` structure which contains /// the raw information returned by the OS. /// diff --git a/library/std/src/os/redox/fs.rs b/library/std/src/os/redox/fs.rs index 682ca6a2c0309..18b51a1bcb2af 100644 --- a/library/std/src/os/redox/fs.rs +++ b/library/std/src/os/redox/fs.rs @@ -1,6 +1,7 @@ #![stable(feature = "metadata_ext", since = "1.1.0")] use crate::fs::Metadata; +use crate::sealed::Sealed; use crate::sys_common::AsInner; #[allow(deprecated)] @@ -10,7 +11,7 @@ use crate::os::redox::raw; /// /// [`fs::Metadata`]: crate::fs::Metadata #[stable(feature = "metadata_ext", since = "1.1.0")] -pub trait MetadataExt { +pub trait MetadataExt: Sealed { /// Gain a reference to the underlying `stat` structure which contains /// the raw information returned by the OS. /// diff --git a/library/std/src/os/solaris/fs.rs b/library/std/src/os/solaris/fs.rs index 0931437370429..1d01ade9c58f0 100644 --- a/library/std/src/os/solaris/fs.rs +++ b/library/std/src/os/solaris/fs.rs @@ -1,6 +1,7 @@ #![stable(feature = "metadata_ext", since = "1.1.0")] use crate::fs::Metadata; +use crate::sealed::Sealed; use crate::sys_common::AsInner; #[allow(deprecated)] @@ -10,7 +11,7 @@ use crate::os::solaris::raw; /// /// [`fs::Metadata`]: crate::fs::Metadata #[stable(feature = "metadata_ext", since = "1.1.0")] -pub trait MetadataExt { +pub trait MetadataExt: Sealed { /// Gain a reference to the underlying `stat` structure which contains /// the raw information returned by the OS. /// diff --git a/library/std/src/os/unix/fs.rs b/library/std/src/os/unix/fs.rs index 0eb4e88cfad96..134d7160b5cef 100644 --- a/library/std/src/os/unix/fs.rs +++ b/library/std/src/os/unix/fs.rs @@ -429,7 +429,7 @@ impl OpenOptionsExt for OpenOptions { /// Unix-specific extensions to [`fs::Metadata`]. #[stable(feature = "metadata_ext", since = "1.1.0")] -pub trait MetadataExt { +pub trait MetadataExt: Sealed { /// Returns the ID of the device containing the file. /// /// # Examples diff --git a/library/std/src/os/vita/fs.rs b/library/std/src/os/vita/fs.rs index a5a06764a4dd8..3ec2679800b47 100644 --- a/library/std/src/os/vita/fs.rs +++ b/library/std/src/os/vita/fs.rs @@ -1,13 +1,14 @@ #![stable(feature = "metadata_ext", since = "1.1.0")] use crate::fs::Metadata; +use crate::sealed::Sealed; use crate::sys_common::AsInner; /// OS-specific extensions to [`fs::Metadata`]. /// /// [`fs::Metadata`]: crate::fs::Metadata #[stable(feature = "metadata_ext", since = "1.1.0")] -pub trait MetadataExt { +pub trait MetadataExt: Sealed { #[stable(feature = "metadata_ext2", since = "1.8.0")] fn st_dev(&self) -> u64; #[stable(feature = "metadata_ext2", since = "1.8.0")] diff --git a/library/std/src/os/vxworks/fs.rs b/library/std/src/os/vxworks/fs.rs index 77e6238ca1f52..500fbaefeebeb 100644 --- a/library/std/src/os/vxworks/fs.rs +++ b/library/std/src/os/vxworks/fs.rs @@ -1,12 +1,12 @@ #![stable(feature = "metadata_ext", since = "1.1.0")] use crate::fs::Metadata; +use crate::sealed::Sealed; use crate::sys_common::AsInner; - /// /// [`fs::Metadata`]: crate::fs::Metadata #[stable(feature = "metadata_ext", since = "1.1.0")] -pub trait MetadataExt { +pub trait MetadataExt: Sealed { #[stable(feature = "metadata_ext2", since = "1.8.0")] fn st_dev(&self) -> u64; #[stable(feature = "metadata_ext2", since = "1.8.0")] diff --git a/library/std/src/os/wasi/fs.rs b/library/std/src/os/wasi/fs.rs index 3da8c835511ac..a362141318e0e 100644 --- a/library/std/src/os/wasi/fs.rs +++ b/library/std/src/os/wasi/fs.rs @@ -9,6 +9,7 @@ use crate::ffi::OsStr; use crate::fs::{self, File, Metadata, OpenOptions}; use crate::io::{self, IoSlice, IoSliceMut}; use crate::path::{Path, PathBuf}; +use crate::sealed::Sealed; use crate::sys_common::{AsInner, AsInnerMut, FromInner}; // Used for `File::read` on intra-doc links #[allow(unused_imports)] @@ -410,7 +411,7 @@ impl OpenOptionsExt for OpenOptions { } /// WASI-specific extensions to [`fs::Metadata`]. -pub trait MetadataExt { +pub trait MetadataExt: Sealed { /// Returns the `st_dev` field of the internal `filestat_t` fn dev(&self) -> u64; /// Returns the `st_ino` field of the internal `filestat_t` diff --git a/library/std/src/os/watchos/fs.rs b/library/std/src/os/watchos/fs.rs index ee215dd598441..64b834f96a9a3 100644 --- a/library/std/src/os/watchos/fs.rs +++ b/library/std/src/os/watchos/fs.rs @@ -12,7 +12,7 @@ use crate::os::watchos::raw; /// /// [`fs::Metadata`]: crate::fs::Metadata #[stable(feature = "metadata_ext", since = "1.1.0")] -pub trait MetadataExt { +pub trait MetadataExt: Sealed { /// Gain a reference to the underlying `stat` structure which contains /// the raw information returned by the OS. /// diff --git a/library/std/src/os/windows/fs.rs b/library/std/src/os/windows/fs.rs index 1b013d1c154c9..2787058e668ed 100644 --- a/library/std/src/os/windows/fs.rs +++ b/library/std/src/os/windows/fs.rs @@ -301,7 +301,7 @@ impl OpenOptionsExt for OpenOptions { /// [`BY_HANDLE_FILE_INFORMATION`]: /// https://docs.microsoft.com/en-us/windows/win32/api/fileapi/ns-fileapi-by_handle_file_information #[stable(feature = "metadata_ext", since = "1.1.0")] -pub trait MetadataExt { +pub trait MetadataExt: Sealed { /// Returns the value of the `dwFileAttributes` field of this metadata. /// /// This field contains the file system attribute information for a file