diff --git a/objc2/src/rc/id_traits.rs b/objc2/src/rc/id_traits.rs index f862bb7ff..65d14de94 100644 --- a/objc2/src/rc/id_traits.rs +++ b/objc2/src/rc/id_traits.rs @@ -54,3 +54,18 @@ impl SliceIdMut for [Id] { unsafe { &mut *ptr } } } + +/// Helper trait to implement [`Default`] on types whoose default is an `Id`. +// TODO: Remove `Sized` bound. +pub trait DefaultId: Sized { + /// Indicates whether the default value is mutable or immutable. + type Ownership: Ownership; + + fn default_id() -> Id; +} + +impl Default for Id { + fn default() -> Self { + T::default_id() + } +} diff --git a/objc2/src/rc/mod.rs b/objc2/src/rc/mod.rs index c52b8a1ca..3cd611d70 100644 --- a/objc2/src/rc/mod.rs +++ b/objc2/src/rc/mod.rs @@ -35,7 +35,7 @@ mod weak_id; pub use self::autorelease::{autoreleasepool, AutoreleasePool, AutoreleaseSafe}; pub use self::id::Id; -pub use self::id_traits::{SliceId, SliceIdMut}; +pub use self::id_traits::{DefaultId, SliceId, SliceIdMut}; pub use self::ownership::{Owned, Ownership, Shared}; pub use self::weak_id::WeakId;