Skip to content

Commit 1e95ff3

Browse files
committed
ndk: Implement common traits where sensible, and drop some Ord
Provided traits in the `ndk` crate are all over the place. Some pointer wrappers and regular enumerations derive `(Partial)Ord` even though there is no sense in using an ordering for these types. Others don't derive `(Partial)Eq` and `Hash` which makes it hard to compare if objects are the same (by-pointer) or to store them inside i.e. `HashMap`. Deriving these types follows Rust's [C-COMMON-TRAITS] convention. Additionally, sort `derives` by their relation, followed by sorting them alphabetically. [C-COMMON-TRAITS]: https://rust-lang.github.io/api-guidelines/interoperability.html#types-eagerly-implement-common-traits-c-common-traits
1 parent e4a0b94 commit 1e95ff3

19 files changed

+107
-104
lines changed

ndk/src/asset.rs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ use std::{
1414
/// A native [`AAssetManager *`]
1515
///
1616
/// [`AAssetManager *`]: https://developer.android.com/ndk/reference/group/asset#aassetmanager
17-
#[derive(Debug)]
17+
#[derive(Debug, PartialEq, Eq, Hash)]
1818
#[doc(alias = "AAssetManager")]
1919
pub struct AssetManager {
2020
ptr: NonNull<ffi::AAssetManager>,
@@ -92,7 +92,7 @@ impl AssetManager {
9292
/// ```
9393
///
9494
/// [`AAssetDir *`]: https://developer.android.com/ndk/reference/group/asset#aassetdir
95-
#[derive(Debug)]
95+
#[derive(Debug, PartialEq, Eq, Hash)]
9696
#[doc(alias = "AAssetDir")]
9797
pub struct AssetDir {
9898
ptr: NonNull<ffi::AAssetDir>,
@@ -175,7 +175,7 @@ impl Iterator for AssetDir {
175175
/// ```
176176
///
177177
/// [`AAsset *`]: https://developer.android.com/ndk/reference/group/asset#aasset
178-
#[derive(Debug)]
178+
#[derive(Debug, PartialEq, Eq, Hash)]
179179
#[doc(alias = "AAsset")]
180180
pub struct Asset {
181181
ptr: NonNull<ffi::AAsset>,

ndk/src/audio.rs

Lines changed: 15 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@ use crate::utils::abort_on_panic;
2929
/// [`android.media.AudioAttributes`]: https://developer.android.com/reference/android/media/AudioAttributes
3030
#[cfg(feature = "api-level-29")]
3131
#[repr(i32)]
32-
#[derive(Copy, Clone, Debug, PartialEq, Eq, FromPrimitive, IntoPrimitive)]
32+
#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, FromPrimitive, IntoPrimitive)]
3333
#[doc(alias = "aaudio_allowed_capture_policy_t")]
3434
#[non_exhaustive]
3535
pub enum AudioAllowedCapturePolicy {
@@ -83,7 +83,7 @@ pub enum AudioAllowedCapturePolicy {
8383
/// [`android.media.AudioAttributes`]: https://developer.android.com/reference/android/media/AudioAttributes
8484
#[cfg(feature = "api-level-28")]
8585
#[repr(i32)]
86-
#[derive(Copy, Clone, Debug, PartialEq, Eq, FromPrimitive, IntoPrimitive)]
86+
#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, FromPrimitive, IntoPrimitive)]
8787
#[doc(alias = "aaudio_content_type_t")]
8888
#[non_exhaustive]
8989
pub enum AudioContentType {
@@ -107,7 +107,7 @@ pub enum AudioContentType {
107107
}
108108

109109
#[repr(i32)]
110-
#[derive(Copy, Clone, Debug, PartialEq, Eq, FromPrimitive, IntoPrimitive)]
110+
#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, FromPrimitive, IntoPrimitive)]
111111
#[doc(alias = "aaudio_direction_t")]
112112
#[non_exhaustive]
113113
pub enum AudioDirection {
@@ -124,7 +124,7 @@ pub enum AudioDirection {
124124
}
125125

126126
#[repr(i32)]
127-
#[derive(Copy, Clone, Debug, PartialEq, Eq, FromPrimitive, IntoPrimitive)]
127+
#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, FromPrimitive, IntoPrimitive)]
128128
#[allow(non_camel_case_types)]
129129
#[doc(alias = "aaudio_format_t")]
130130
#[non_exhaustive]
@@ -159,7 +159,7 @@ pub enum AudioFormat {
159159
/// Note that these match the equivalent values in MediaRecorder.AudioSource in the Android Java API.
160160
#[cfg(feature = "api-level-28")]
161161
#[repr(i32)]
162-
#[derive(Copy, Clone, Debug, PartialEq, Eq, FromPrimitive, IntoPrimitive)]
162+
#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, FromPrimitive, IntoPrimitive)]
163163
#[doc(alias = "aaudio_input_preset_t")]
164164
#[non_exhaustive]
165165
pub enum AudioInputPreset {
@@ -193,7 +193,7 @@ pub enum AudioInputPreset {
193193
}
194194

195195
#[repr(i32)]
196-
#[derive(Copy, Clone, Debug, PartialEq, Eq, FromPrimitive, IntoPrimitive)]
196+
#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, FromPrimitive, IntoPrimitive)]
197197
#[doc(alias = "aaudio_performance_mode_t")]
198198
#[non_exhaustive]
199199
pub enum AudioPerformanceMode {
@@ -216,7 +216,7 @@ pub enum AudioPerformanceMode {
216216
}
217217

218218
#[repr(i32)]
219-
#[derive(Copy, Clone, Debug, PartialEq, Eq, FromPrimitive, IntoPrimitive)]
219+
#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, FromPrimitive, IntoPrimitive)]
220220
#[doc(alias = "aaudio_sharing_mode_t")]
221221
#[non_exhaustive]
222222
pub enum AudioSharingMode {
@@ -245,7 +245,7 @@ pub enum AudioSharingMode {
245245
/// [`android.media.AudioAttributes`]: https://developer.android.com/reference/android/media/AudioAttributes
246246
#[cfg(feature = "api-level-28")]
247247
#[repr(i32)]
248-
#[derive(Copy, Clone, Debug, PartialEq, Eq, FromPrimitive, IntoPrimitive)]
248+
#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, FromPrimitive, IntoPrimitive)]
249249
#[doc(alias = "aaudio_usage_t")]
250250
#[non_exhaustive]
251251
pub enum AudioUsage {
@@ -312,7 +312,7 @@ pub enum AudioUsage {
312312
}
313313

314314
#[repr(i32)]
315-
#[derive(Copy, Clone, Debug, PartialEq, Eq, FromPrimitive, IntoPrimitive)]
315+
#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, FromPrimitive, IntoPrimitive)]
316316
#[doc(alias = "aaudio_stream_state_t")]
317317
#[non_exhaustive]
318318
pub enum AudioStreamState {
@@ -358,21 +358,21 @@ impl AudioStreamState {
358358
}
359359
}
360360

361-
#[derive(Copy, Clone, Debug, PartialEq, Eq)]
361+
#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash)]
362362
#[doc(alias = "aaudio_session_id_t")]
363363
pub enum SessionId {
364364
None,
365365
Allocated(NonZeroI32),
366366
}
367367

368-
#[derive(Copy, Clone, Debug)]
368+
#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash)]
369369
pub struct Timestamp {
370370
pub frame_position: i64,
371371
pub time_nanoseconds: i64,
372372
}
373373

374374
#[repr(u32)]
375-
#[derive(Copy, Clone, Debug, PartialEq, Eq)]
375+
#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash)]
376376
#[non_exhaustive]
377377
pub enum Clockid {
378378
#[doc(alias = "CLOCK_MONOTONIC")]
@@ -383,7 +383,7 @@ pub enum Clockid {
383383

384384
/// Value returned the data callback function.
385385
#[repr(i32)]
386-
#[derive(Copy, Clone, Debug, PartialEq, Eq, IntoPrimitive)]
386+
#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, IntoPrimitive)]
387387
#[doc(alias = "aaudio_data_callback_result_t")]
388388
#[non_exhaustive]
389389
pub enum AudioCallbackResult {
@@ -399,7 +399,7 @@ pub enum AudioCallbackResult {
399399
}
400400

401401
#[repr(i32)]
402-
#[derive(Copy, Clone, Debug, PartialEq, Eq, FromPrimitive, IntoPrimitive)]
402+
#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, FromPrimitive, IntoPrimitive)]
403403
#[doc(alias = "aaudio_result_t")]
404404
#[non_exhaustive]
405405
pub enum AudioError {
@@ -983,6 +983,7 @@ impl Drop for AudioStreamBuilder {
983983
///
984984
/// [`AAudioStream *`]: https://developer.android.com/ndk/reference/group/audio#aaudiostream
985985
#[doc(alias = "AAudioStream")]
986+
// #[derive(Debug, PartialEq, Eq, Hash)]
986987
pub struct AudioStream {
987988
inner: NonNull<ffi::AAudioStream>,
988989
data_callback: Option<AudioStreamDataCallback>,

ndk/src/bitmap.rs

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ use crate::data_space::DataSpace;
1616
use crate::hardware_buffer::HardwareBufferRef;
1717

1818
#[repr(i32)]
19-
#[derive(Copy, Clone, Debug, PartialEq, Eq, FromPrimitive, IntoPrimitive)]
19+
#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, FromPrimitive, IntoPrimitive)]
2020
#[non_exhaustive]
2121
pub enum BitmapError {
2222
#[doc(alias = "ANDROID_BITMAP_RESULT_ALLOCATION_FAILED")]
@@ -90,7 +90,7 @@ pub enum BitmapFormat {
9090
/// An immediate wrapper over [`android.graphics.Bitmap`]
9191
///
9292
/// [`android.graphics.Bitmap`]: https://developer.android.com/reference/android/graphics/Bitmap
93-
#[derive(Debug)]
93+
#[derive(Debug, PartialEq, Eq, Hash)]
9494
pub struct Bitmap {
9595
env: *mut JNIEnv,
9696
inner: jobject,
@@ -299,7 +299,7 @@ impl Bitmap {
299299
/// Possible values for [`ffi::ANDROID_BITMAP_FLAGS_ALPHA_MASK`] within [`BitmapInfoFlags`]
300300
#[repr(u32)]
301301
#[cfg(feature = "api-level-30")]
302-
#[derive(Clone, Copy, Debug, IntoPrimitive, FromPrimitive)]
302+
#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, FromPrimitive, IntoPrimitive)]
303303
#[doc(alias = "ANDROID_BITMAP_FLAGS_ALPHA_MASK")]
304304
#[non_exhaustive]
305305
pub enum BitmapInfoFlagsAlpha {
@@ -321,7 +321,7 @@ pub enum BitmapInfoFlagsAlpha {
321321
/// Bitfield containing information about the bitmap.
322322
#[cfg(feature = "api-level-30")]
323323
#[repr(transparent)]
324-
#[derive(Clone, Copy, Hash, PartialEq, Eq)]
324+
#[derive(Clone, Copy, PartialEq, Eq, Hash)]
325325
pub struct BitmapInfoFlags(u32);
326326

327327
#[cfg(feature = "api-level-30")]
@@ -359,7 +359,7 @@ impl BitmapInfoFlags {
359359
/// A native [`AndroidBitmapInfo`]
360360
///
361361
/// [`AndroidBitmapInfo`]: https://developer.android.com/ndk/reference/struct/android-bitmap-info#struct_android_bitmap_info
362-
#[derive(Clone, Copy)]
362+
#[derive(Clone, Copy)] // TODO: PartialEq, Eq, Hash
363363
#[doc(alias = "AndroidBitmapInfo")]
364364
pub struct BitmapInfo {
365365
inner: ffi::AndroidBitmapInfo,
@@ -440,7 +440,7 @@ impl BitmapInfo {
440440
/// [`Bitmap::compress_raw()`].
441441
#[cfg(feature = "api-level-30")]
442442
#[repr(i32)]
443-
#[derive(Clone, Copy, Debug, Hash, PartialEq, Eq, FromPrimitive, IntoPrimitive)]
443+
#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, FromPrimitive, IntoPrimitive)]
444444
#[doc(alias = "AndroidBitmapCompressFormat")]
445445
#[non_exhaustive]
446446
pub enum BitmapCompressFormat {
@@ -477,7 +477,7 @@ pub enum BitmapCompressFormat {
477477

478478
/// Encapsulates possible errors returned by [`Bitmap::compress()`] or [`Bitmap::compress_raw()`].
479479
#[cfg(feature = "api-level-30")]
480-
#[derive(Debug, thiserror::Error)]
480+
#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, thiserror::Error)]
481481
pub enum BitmapCompressError {
482482
#[error(transparent)]
483483
BitmapError(#[from] BitmapError),

ndk/src/configuration.rs

Lines changed: 17 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@ use std::ptr::NonNull;
1919
/// [`Configuration`] is an opaque type used to get and set various subsystem configurations.
2020
///
2121
/// [`AConfiguration *`]: https://developer.android.com/ndk/reference/group/configuration#aconfiguration
22+
// TODO: Implement hash based on ptr or contents?
2223
pub struct Configuration {
2324
ptr: NonNull<ffi::AConfiguration>,
2425
}
@@ -280,7 +281,7 @@ impl Configuration {
280281
}
281282

282283
/// A bitfield representing the differences between two [`Configuration`]s
283-
#[derive(Copy, Clone, Debug, PartialEq, Eq)]
284+
#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash)]
284285
pub struct DiffResult(pub u32);
285286

286287
impl DiffResult {
@@ -337,7 +338,7 @@ impl DiffResult {
337338
}
338339
}
339340

340-
#[derive(Debug, Clone, Copy, PartialEq, Eq, FromPrimitive, IntoPrimitive)]
341+
#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, FromPrimitive, IntoPrimitive)]
341342
#[repr(i32)]
342343
#[non_exhaustive]
343344
pub enum Orientation {
@@ -351,7 +352,7 @@ pub enum Orientation {
351352
__Unknown(i32),
352353
}
353354

354-
#[derive(Debug, Clone, Copy, PartialEq, Eq, FromPrimitive, IntoPrimitive)]
355+
#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, FromPrimitive, IntoPrimitive)]
355356
#[repr(i32)]
356357
#[non_exhaustive]
357358
pub enum Touchscreen {
@@ -365,7 +366,7 @@ pub enum Touchscreen {
365366
__Unknown(i32),
366367
}
367368

368-
#[derive(Debug, Clone, Copy, PartialEq, Eq, FromPrimitive, IntoPrimitive)]
369+
#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, FromPrimitive, IntoPrimitive)] // TODO: Ord?
369370
#[repr(i32)]
370371
#[non_exhaustive]
371372
pub enum Density {
@@ -432,7 +433,7 @@ impl Density {
432433
}
433434
}
434435

435-
#[derive(Debug, Clone, Copy, PartialEq, Eq, FromPrimitive, IntoPrimitive)]
436+
#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, FromPrimitive, IntoPrimitive)]
436437
#[repr(i32)]
437438
#[non_exhaustive]
438439
pub enum Keyboard {
@@ -446,7 +447,7 @@ pub enum Keyboard {
446447
__Unknown(i32),
447448
}
448449

449-
#[derive(Debug, Clone, Copy, PartialEq, Eq, FromPrimitive, IntoPrimitive)]
450+
#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, FromPrimitive, IntoPrimitive)]
450451
#[repr(i32)]
451452
#[non_exhaustive]
452453
pub enum Navigation {
@@ -461,7 +462,7 @@ pub enum Navigation {
461462
__Unknown(i32),
462463
}
463464

464-
#[derive(Debug, Clone, Copy, PartialEq, Eq, FromPrimitive, IntoPrimitive)]
465+
#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, FromPrimitive, IntoPrimitive)]
465466
#[repr(i32)]
466467
#[non_exhaustive]
467468
pub enum KeysHidden {
@@ -475,7 +476,7 @@ pub enum KeysHidden {
475476
__Unknown(i32),
476477
}
477478

478-
#[derive(Debug, Clone, Copy, PartialEq, Eq, FromPrimitive, IntoPrimitive)]
479+
#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, FromPrimitive, IntoPrimitive)]
479480
#[repr(i32)]
480481
#[non_exhaustive]
481482
pub enum NavHidden {
@@ -488,7 +489,7 @@ pub enum NavHidden {
488489
__Unknown(i32),
489490
}
490491

491-
#[derive(Debug, Clone, Copy, PartialEq, Eq, FromPrimitive, IntoPrimitive)]
492+
#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, FromPrimitive, IntoPrimitive)] // TODO: Ord?
492493
#[repr(i32)]
493494
#[non_exhaustive]
494495
pub enum ScreenSize {
@@ -503,7 +504,7 @@ pub enum ScreenSize {
503504
__Unknown(i32),
504505
}
505506

506-
#[derive(Debug, Clone, Copy, PartialEq, Eq, FromPrimitive, IntoPrimitive)]
507+
#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, FromPrimitive, IntoPrimitive)]
507508
#[repr(i32)]
508509
#[non_exhaustive]
509510
pub enum ScreenLong {
@@ -516,7 +517,7 @@ pub enum ScreenLong {
516517
__Unknown(i32),
517518
}
518519

519-
#[derive(Debug, Clone, Copy, PartialEq, Eq, FromPrimitive, IntoPrimitive)]
520+
#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, FromPrimitive, IntoPrimitive)]
520521
#[repr(i32)]
521522
#[non_exhaustive]
522523
pub enum ScreenRound {
@@ -529,7 +530,7 @@ pub enum ScreenRound {
529530
__Unknown(i32),
530531
}
531532

532-
#[derive(Debug, Clone, Copy, PartialEq, Eq, FromPrimitive, IntoPrimitive)]
533+
#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, FromPrimitive, IntoPrimitive)]
533534
#[repr(i32)]
534535
#[non_exhaustive]
535536
pub enum WideColorGamut {
@@ -542,7 +543,7 @@ pub enum WideColorGamut {
542543
__Unknown(i32),
543544
}
544545

545-
#[derive(Debug, Clone, Copy, PartialEq, Eq, FromPrimitive, IntoPrimitive)]
546+
#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, FromPrimitive, IntoPrimitive)]
546547
#[repr(i32)]
547548
#[non_exhaustive]
548549
pub enum HDR {
@@ -555,7 +556,7 @@ pub enum HDR {
555556
__Unknown(i32),
556557
}
557558

558-
#[derive(Debug, Clone, Copy, PartialEq, Eq, FromPrimitive, IntoPrimitive)]
559+
#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, FromPrimitive, IntoPrimitive)]
559560
#[repr(i32)]
560561
#[non_exhaustive]
561562
pub enum LayoutDir {
@@ -568,7 +569,7 @@ pub enum LayoutDir {
568569
__Unknown(i32),
569570
}
570571

571-
#[derive(Debug, Clone, Copy, PartialEq, Eq, FromPrimitive, IntoPrimitive)]
572+
#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, FromPrimitive, IntoPrimitive)]
572573
#[repr(i32)]
573574
#[non_exhaustive]
574575
pub enum UiModeType {
@@ -586,7 +587,7 @@ pub enum UiModeType {
586587
__Unknown(i32),
587588
}
588589

589-
#[derive(Debug, Clone, Copy, PartialEq, Eq, FromPrimitive, IntoPrimitive)]
590+
#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, FromPrimitive, IntoPrimitive)]
590591
#[repr(i32)]
591592
#[non_exhaustive]
592593
pub enum UiModeNight {

0 commit comments

Comments
 (0)