You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Method with callback: async fn a() (WithCompletionHandler stripped)
Enum: struct NSAccessibilityAnnotationPosition(NSInteger), Swift usually creates a nested items like NSAccessibility::AnnotationPosition, but that is not possible in Rust
Static: impl NSBitmapImageRepPropertyKey { fn currentFrameDuration() -> &'static Self }, associated statics are not possible in Rust yet so we must create a new function that can return it (also if we want to make it safe)
Static: impl NSBitmapImageRepPropertyKey { fn current_frame_duration() -> &'static Self }, function is made lowercase, in the future if we get associated statics then the name would change to be uppercase
Function: impl NSWindowDepth { fn bits_per_pixel() -> NSInteger }, function is made lowercase
I like option 1 since it'll mean that things are more "searchable"/"grepable". This point also somewhat goes for option 2, though a bit less so, since Swift is newer. The downside to both of these is of course that the names don't really match Rust's naming conventions.
Implementation wise: Option 1 is already implemented, so that's easy. Option 2 has seen a lot of work already by Apple/Swift developers, and they've even created the .apinotes system to help with edge-cases. Option 3 would be quite easy on top of 2, but would require a bit extra work if we want to tweak names further afterwards.
icrate(or whatever it'll end up being named) is nearing an initial version, see #264.After that, we need to figure out how we should handle name translation for enums, method names, and so on. There are a few options:
Foundationstruct NSObjectstruct NSCopyingtrait NSAccessibility; impl NSAccessibility for NSObject;(or perhapsNSObject_NSAccessibility?)fn someMethod(arg: i32),fn someMethod_withExtraParam(arg: i32, extra: u32)fn aMethod_error(arg: i32) -> Result<(), Id<NSError>>async fn aMethodWithCompletionHandler(f: &Block<(), ()>), see alsoasyncsupport #279struct NSAccessibilityAnnotationPosition(NSInteger)const NSAccessibilityAnnotationPositionFullRange: NSAccessibilityAnnotationPosition = ...struct NSDirectionalEdgeInsets { fields* }const NSModalResponseStop: NSModalResponse = 1000struct NSBitmapImageRepPropertyKey(NSString)extern "C" { static NSImageCurrentFrameDuration: NSBitmapImageRepPropertyKey }extern "C" { fn NSBitsPerPixelFromDepth(depth: NSWindowDepth) -> NSInteger }Foundationfn some(method: i32),fn some_with(method: i32, extraParam: u32)(name is significantly stripped)fn a(arg: i32) -> Result<(), Id<NSError>>(errorpostfix is removed)async fn a()(WithCompletionHandlerstripped)struct NSAccessibilityAnnotationPosition(NSInteger), Swift usually creates a nested items likeNSAccessibility::AnnotationPosition, but that is not possible in Rustimpl NSAccessibilityAnnotationPosition { const fullRange: Self = ... }struct NSDirectionalEdgeInsets { fields* }impl NSModalResponse { const stop: Self = 1000 }struct NSBitmapImageRepPropertyKey(NSString)impl NSBitmapImageRepPropertyKey { fn currentFrameDuration() -> &'static Self }, associated statics are not possible in Rust yet so we must create a new function that can return it (also if we want to make it safe)impl NSWindowDepth { fn bitsPerPixel() -> NSInteger }foundationfn some_long_method_name(method: i32), method name is made always lowercase (note: difficult now to tell which selector it corresponds to)impl NSAccessibilityAnnotationPosition { const FULL_RANGE: Self = ... }, constant is uppercaseimpl NSModalResponse { const STOP: Self = 1000 }, constant is uppercaseimpl NSBitmapImageRepPropertyKey { fn current_frame_duration() -> &'static Self }, function is made lowercase, in the future if we get associated statics then the name would change to be uppercaseimpl NSWindowDepth { fn bits_per_pixel() -> NSInteger }, function is made lowercaseI like option 1 since it'll mean that things are more "searchable"/"grepable". This point also somewhat goes for option 2, though a bit less so, since Swift is newer. The downside to both of these is of course that the names don't really match Rust's naming conventions.
Implementation wise: Option 1 is already implemented, so that's easy. Option 2 has seen a lot of work already by Apple/Swift developers, and they've even created the
.apinotessystem to help with edge-cases. Option 3 would be quite easy on top of 2, but would require a bit extra work if we want to tweak names further afterwards.