-
Notifications
You must be signed in to change notification settings - Fork 61
Closed
Labels
questionFurther information is requestedFurther information is requested
Description
There's a lot of places in objc2_foundation
that would benefit from being able to implement From
for specific Id
s:
NSArray::from_vec
NSArray::into_vec
NSData::from_vec
NSDictionary::from_keys_and_objects
NSString::from_str
- And so on...
Same goes for traits like Default
.
But unfortunately, we can't create these implementations because Id
is defined in another crate, see RFC 2451. I tried creating a helper trait FromId
for this purpose, but that doesn't work either:
pub trait FromId<T, O: Ownership> {
fn from_id(obj: Id<T, O>) -> Self;
}
impl<T, O: Ownership, X: FromId<T, O>> From<Id<T, O>> for X {
fn from(obj: Id<T, O>) -> Self {
Self::from_id(obj)
}
}
// Errors with:
// note: conflicting implementation in crate `core`:
// - impl<T> From<T> for T;
// note: downstream crates may implement trait `FromId<_, _>` for type `Id<_, _>`
Though doing it for Default
would:
// In objc2:
pub trait IdDefault: Sized {
type Ownership: Ownership;
fn id_default() -> Id<Self, Self::Ownership>;
}
impl<T: IdDefault> Default for Id<T, T::Ownership> {
fn default() -> Self {
T::id_default()
}
}
// In objc2_foundation:
impl IdDefault for NSString {
type Ownership = <NSString as INSObject>::Ownership;
fn id_default() -> Id<Self, Self::Ownership> {
<NSString as INSObject>::new()
}
}
So possible solutions:
- Move
objc2_foundation
toobjc2::foundation
(under a feature flag) - Move
Id
toobjc2_foundation
?
Metadata
Metadata
Assignees
Labels
questionFurther information is requestedFurther information is requested