From 4d19d7b0b67b94c2950658dd6de8f2f34ba73d84 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sebastian=20Dr=C3=B6ge?= Date: Wed, 25 Oct 2023 12:09:45 +0300 Subject: [PATCH] gstreamer: format: Implement some more conversion traits Specifically, `From<$formatted_type> for $inner` and `TryFrom<$formatted_type> for usize` for some types. Fixes https://gitlab.freedesktop.org/gstreamer/gstreamer-rs/-/issues/492 Part-of: --- gstreamer/src/format/generic.rs | 8 ++++++++ gstreamer/src/format/macros.rs | 6 ++++++ gstreamer/src/format/specific.rs | 24 ++++++++++++++++++++++++ 3 files changed, 38 insertions(+) diff --git a/gstreamer/src/format/generic.rs b/gstreamer/src/format/generic.rs index f527a8b57..f4891742c 100644 --- a/gstreamer/src/format/generic.rs +++ b/gstreamer/src/format/generic.rs @@ -74,6 +74,14 @@ impl TryFromGlib for Other { } } +impl TryFrom for usize { + type Error = std::num::TryFromIntError; + + fn try_from(value: Other) -> Result { + value.0.try_into() + } +} + // FIXME `functions in traits cannot be const` (rustc 1.64.0) // rustdoc-stripper-ignore-next /// `Other` formatted value constructor trait. diff --git a/gstreamer/src/format/macros.rs b/gstreamer/src/format/macros.rs index 729d2e5ee..ec3c5a515 100644 --- a/gstreamer/src/format/macros.rs +++ b/gstreamer/src/format/macros.rs @@ -281,6 +281,12 @@ macro_rules! impl_common_ops_for_newtype_uint( } } + impl From<$typ> for $inner { + fn from(v: $typ) -> $inner { + v.0 + } + } + impl_trait_op_same!($typ, Add, add, AddAssign, add_assign); impl_trait_op_same!($typ, Sub, sub, SubAssign, sub_assign); impl std::ops::Div for $typ { diff --git a/gstreamer/src/format/specific.rs b/gstreamer/src/format/specific.rs index 5ab6aa9f4..d36c01dcb 100644 --- a/gstreamer/src/format/specific.rs +++ b/gstreamer/src/format/specific.rs @@ -67,6 +67,14 @@ impl_format_value_traits!(Buffers, Buffers, Buffers, u64); option_glib_newtype_from_to!(Buffers, Buffers::OFFSET_NONE); glib_newtype_display!(Buffers, DisplayableOptionBuffers, Format::Buffers); +impl TryFrom for usize { + type Error = std::num::TryFromIntError; + + fn try_from(value: Buffers) -> Result { + value.0.try_into() + } +} + // FIXME `functions in traits cannot be const` (rustc 1.64.0) // rustdoc-stripper-ignore-next /// `Buffers` formatted value constructor trait. @@ -143,6 +151,14 @@ impl_format_value_traits!(Bytes, Bytes, Bytes, u64); option_glib_newtype_from_to!(Bytes, u64::MAX); glib_newtype_display!(Bytes, DisplayableOptionBytes, Format::Bytes); +impl TryFrom for usize { + type Error = std::num::TryFromIntError; + + fn try_from(value: Bytes) -> Result { + value.0.try_into() + } +} + // FIXME `functions in traits cannot be const` (rustc 1.64.0) // rustdoc-stripper-ignore-next /// `Bytes` formatted value constructor trait. @@ -240,6 +256,14 @@ impl_format_value_traits!(Default, Default, Default, u64); option_glib_newtype_from_to!(Default, u64::MAX); glib_newtype_display!(Default, DisplayableOptionDefault, Format::Default); +impl TryFrom for usize { + type Error = std::num::TryFromIntError; + + fn try_from(value: Default) -> Result { + value.0.try_into() + } +} + // FIXME `functions in traits cannot be const` (rustc 1.64.0) // rustdoc-stripper-ignore-next /// `Default` formatted value constructor trait.