Add field_if_some setter for builder ClockTime fields

Optional `ClockTime` fields already implemented their setters in such a way
that they could accept either `Option<ClockTime>` or `ClockTime`. This commit
adds `field_if_some()` setter variants for builder `ClockTime` builder fields
for consistency with other builder fields.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer-rs/-/merge_requests/1424>
This commit is contained in:
François Laignel 2024-04-17 14:38:56 +02:00
parent ea25c9262b
commit db03c8edd1
3 changed files with 88 additions and 0 deletions

View file

@ -138,6 +138,14 @@ impl<'a> DownstreamForceKeyUnitEventBuilder<'a> {
}
}
pub fn timestamp_if_some(self, timestamp: Option<gst::ClockTime>) -> Self {
if let Some(timestamp) = timestamp {
self.timestamp(timestamp)
} else {
self
}
}
pub fn stream_time(self, stream_time: impl Into<Option<gst::ClockTime>>) -> Self {
Self {
stream_time: stream_time.into(),
@ -145,6 +153,14 @@ impl<'a> DownstreamForceKeyUnitEventBuilder<'a> {
}
}
pub fn stream_time_if_some(self, stream_time: Option<gst::ClockTime>) -> Self {
if let Some(stream_time) = stream_time {
self.stream_time(stream_time)
} else {
self
}
}
pub fn running_time(self, running_time: impl Into<Option<gst::ClockTime>>) -> Self {
Self {
running_time: running_time.into(),
@ -152,6 +168,14 @@ impl<'a> DownstreamForceKeyUnitEventBuilder<'a> {
}
}
pub fn running_time_if_some(self, running_time: Option<gst::ClockTime>) -> Self {
if let Some(running_time) = running_time {
self.running_time(running_time)
} else {
self
}
}
pub fn all_headers(self, all_headers: bool) -> Self {
Self {
all_headers,
@ -268,6 +292,14 @@ impl<'a> UpstreamForceKeyUnitEventBuilder<'a> {
}
}
pub fn running_time_if_some(self, running_time: Option<gst::ClockTime>) -> Self {
if let Some(running_time) = running_time {
self.running_time(running_time)
} else {
self
}
}
pub fn all_headers(self, all_headers: bool) -> Self {
Self {
all_headers,

View file

@ -2634,6 +2634,14 @@ impl<'a> GapBuilder<'a> {
self
}
pub fn duration_if_some(self, duration: Option<ClockTime>) -> Self {
if let Some(duration) = duration {
self.duration(duration)
} else {
self
}
}
event_builder_generic_impl!(|s: &Self| {
#[allow(clippy::let_and_return)]
let ev = ffi::gst_event_new_gap(s.timestamp.into_glib(), s.duration.into_glib());
@ -2700,6 +2708,14 @@ impl<'a> QosBuilder<'a> {
self
}
pub fn timestamp_if_some(self, timestamp: Option<ClockTime>) -> Self {
if let Some(timestamp) = timestamp {
self.timestamp(timestamp)
} else {
self
}
}
event_builder_generic_impl!(|s: &Self| ffi::gst_event_new_qos(
s.type_.into_glib(),
s.proportion,

View file

@ -3276,6 +3276,14 @@ impl<'a> AsyncDoneBuilder<'a> {
self
}
pub fn running_time_if_some(self, running_time: Option<crate::ClockTime>) -> Self {
if let Some(running_time) = running_time {
self.running_time(running_time)
} else {
self
}
}
message_builder_generic_impl!(|s: &mut Self, src| ffi::gst_message_new_async_done(
src,
s.running_time.into_glib()
@ -3375,21 +3383,53 @@ impl<'a> QosBuilder<'a> {
self
}
pub fn running_time_if_some(self, running_time: Option<crate::ClockTime>) -> Self {
if let Some(running_time) = running_time {
self.running_time(running_time)
} else {
self
}
}
pub fn stream_time(mut self, stream_time: impl Into<Option<crate::ClockTime>>) -> Self {
self.stream_time = stream_time.into();
self
}
pub fn stream_time_if_some(self, stream_time: Option<crate::ClockTime>) -> Self {
if let Some(stream_time) = stream_time {
self.stream_time(stream_time)
} else {
self
}
}
pub fn timestamp(mut self, timestamp: impl Into<Option<crate::ClockTime>>) -> Self {
self.timestamp = timestamp.into();
self
}
pub fn timestamp_if_some(self, timestamp: Option<crate::ClockTime>) -> Self {
if let Some(timestamp) = timestamp {
self.timestamp(timestamp)
} else {
self
}
}
pub fn duration(mut self, duration: impl Into<Option<crate::ClockTime>>) -> Self {
self.duration = duration.into();
self
}
pub fn duration_if_some(self, duration: Option<crate::ClockTime>) -> Self {
if let Some(duration) = duration {
self.duration(duration)
} else {
self
}
}
pub fn values(self, jitter: i64, proportion: f64, quality: i32) -> Self {
Self {
values: Some((jitter, proportion, quality)),