Struct gstreamer_check::TestClock
source · pub struct TestClock { /* private fields */ }
Expand description
GstTestClock is an implementation of gst::Clock
which has different
behaviour compared to gst::SystemClock
. Time for gst::SystemClock
advances
according to the system time, while time for TestClock
changes only
when set_time()
or advance_time()
are
called. TestClock
provides unit tests with the possibility to
precisely advance the time in a deterministic manner, independent of the
system time or any other external factors.
§Advancing the time of a TestClock
⚠️ The following code is in C ⚠️
#include <gst/gst.h>
#include <gst/check/gsttestclock.h>
GstClock *clock;
GstTestClock *test_clock;
clock = gst_test_clock_new ();
test_clock = GST_TEST_CLOCK (clock);
GST_INFO ("Time: %" GST_TIME_FORMAT, GST_TIME_ARGS (gst_clock_get_time (clock)));
gst_test_clock_advance_time ( test_clock, 1 * GST_SECOND);
GST_INFO ("Time: %" GST_TIME_FORMAT, GST_TIME_ARGS (gst_clock_get_time (clock)));
g_usleep (10 * G_USEC_PER_SEC);
GST_INFO ("Time: %" GST_TIME_FORMAT, GST_TIME_ARGS (gst_clock_get_time (clock)));
gst_test_clock_set_time (test_clock, 42 * GST_SECOND);
GST_INFO ("Time: %" GST_TIME_FORMAT, GST_TIME_ARGS (gst_clock_get_time (clock)));
...
gst::Clock
allows for setting up single shot or periodic clock notifications
as well as waiting for these notifications synchronously (using
gst_clock_id_wait()
) or asynchronously (using gst_clock_id_wait_async()
or
gst_clock_id_wait_async()
). This is used by many GStreamer elements,
among them GstBaseSrc
and GstBaseSink
.
TestClock
keeps track of these clock notifications. By calling
wait_for_next_pending_id()
or
wait_for_multiple_pending_ids()
a unit tests may wait for the
next one or several clock notifications to be requested. Additionally unit
tests may release blocked waits in a controlled fashion by calling
process_next_clock_id()
. This way a unit test can control the
inaccuracy (jitter) of clock notifications, since the test can decide to
release blocked waits when the clock time has advanced exactly to, or past,
the requested clock notification time.
There are also interfaces for determining if a notification belongs to a
TestClock
or not, as well as getting the number of requested clock
notifications so far.
N.B.: When a unit test waits for a certain amount of clock notifications to
be requested in wait_for_next_pending_id()
or
wait_for_multiple_pending_ids()
then these functions may block
for a long time. If they block forever then the expected clock notifications
were never requested from TestClock
, and so the assumptions in the code
of the unit test are wrong. The unit test case runner in gstcheck is
expected to catch these cases either by the default test case timeout or the
one set for the unit test by calling tcase_set_timeout().
The sample code below assumes that the element under test will delay a
buffer pushed on the source pad by some latency until it arrives on the sink
pad. Moreover it is assumed that the element will at some point call
gst_clock_id_wait()
to synchronously wait for a specific time. The first
buffer sent will arrive exactly on time only delayed by the latency. The
second buffer will arrive a little late (7ms) due to simulated jitter in the
clock notification.
§Demonstration of how to work with clock notifications and TestClock
⚠️ The following code is in C ⚠️
#include <gst/gst.h>
#include <gst/check/gstcheck.h>
#include <gst/check/gsttestclock.h>
GstClockTime latency;
GstElement *element;
GstPad *srcpad;
GstClock *clock;
GstTestClock *test_clock;
GstBuffer buf;
GstClockID pending_id;
GstClockID processed_id;
latency = 42 * GST_MSECOND;
element = create_element (latency, ...);
srcpad = get_source_pad (element);
clock = gst_test_clock_new ();
test_clock = GST_TEST_CLOCK (clock);
gst_element_set_clock (element, clock);
GST_INFO ("Set time, create and push the first buffer\n");
gst_test_clock_set_time (test_clock, 0);
buf = create_test_buffer (gst_clock_get_time (clock), ...);
gst_assert_cmpint (gst_pad_push (srcpad, buf), ==, GST_FLOW_OK);
GST_INFO ("Block until element is waiting for a clock notification\n");
gst_test_clock_wait_for_next_pending_id (test_clock, &pending_id);
GST_INFO ("Advance to the requested time of the clock notification\n");
gst_test_clock_advance_time (test_clock, latency);
GST_INFO ("Release the next blocking wait and make sure it is the one from element\n");
processed_id = gst_test_clock_process_next_clock_id (test_clock);
g_assert (processed_id == pending_id);
g_assert_cmpint (GST_CLOCK_ENTRY_STATUS (processed_id), ==, GST_CLOCK_OK);
gst_clock_id_unref (pending_id);
gst_clock_id_unref (processed_id);
GST_INFO ("Validate that element produced an output buffer and check its timestamp\n");
g_assert_cmpint (get_number_of_output_buffer (...), ==, 1);
buf = get_buffer_pushed_by_element (element, ...);
g_assert_cmpint (GST_BUFFER_TIMESTAMP (buf), ==, latency);
gst_buffer_unref (buf);
GST_INFO ("Check that element does not wait for any clock notification\n");
g_assert (!gst_test_clock_peek_next_pending_id (test_clock, NULL));
GST_INFO ("Set time, create and push the second buffer\n");
gst_test_clock_advance_time (test_clock, 10 * GST_SECOND);
buf = create_test_buffer (gst_clock_get_time (clock), ...);
gst_assert_cmpint (gst_pad_push (srcpad, buf), ==, GST_FLOW_OK);
GST_INFO ("Block until element is waiting for a new clock notification\n");
(gst_test_clock_wait_for_next_pending_id (test_clock, &pending_id);
GST_INFO ("Advance past 7ms beyond the requested time of the clock notification\n");
gst_test_clock_advance_time (test_clock, latency + 7 * GST_MSECOND);
GST_INFO ("Release the next blocking wait and make sure it is the one from element\n");
processed_id = gst_test_clock_process_next_clock_id (test_clock);
g_assert (processed_id == pending_id);
g_assert_cmpint (GST_CLOCK_ENTRY_STATUS (processed_id), ==, GST_CLOCK_OK);
gst_clock_id_unref (pending_id);
gst_clock_id_unref (processed_id);
GST_INFO ("Validate that element produced an output buffer and check its timestamp\n");
g_assert_cmpint (get_number_of_output_buffer (...), ==, 1);
buf = get_buffer_pushed_by_element (element, ...);
g_assert_cmpint (GST_BUFFER_TIMESTAMP (buf), ==,
10 * GST_SECOND + latency + 7 * GST_MSECOND);
gst_buffer_unref (buf);
GST_INFO ("Check that element does not wait for any clock notification\n");
g_assert (!gst_test_clock_peek_next_pending_id (test_clock, NULL));
...
Since TestClock
is only supposed to be used in unit tests it calls
g_assert()
, g_assert_cmpint()
or g_assert_cmpuint()
to validate all function
arguments. This will highlight any issues with the unit test code itself.
§Properties
§clock-type
Readable | Writeable
§start-time
When a TestClock
is constructed it will have a certain start time set.
If the clock was created using TestClock::with_start_time()
then
this property contains the value of the start_time
argument. If
TestClock::new()
was called the clock started at time zero, and thus
this property contains the value 0.
Readable | Writeable | Construct Only
Clock
§timeout
Readable | Writeable
§window-size
Readable | Writeable
§window-threshold
Readable | Writeable
Object
§name
Readable | Writeable | Construct
§parent
The parent of the object. Please note, that when changing the ‘parent’
property, we don’t emit notify
and deep-notify
signals due to locking issues. In some cases one can use
element-added
or element-removed
signals on the parent to
achieve a similar effect.
Readable | Writeable
§Implements
gst::prelude::ClockExt
, gst::prelude::ObjectExt
, [trait@glib::ObjectExt
]
GLib type: GObject with reference counted clone semantics.
Implementations§
source§impl TestClock
impl TestClock
sourcepub fn new() -> TestClock
pub fn new() -> TestClock
Creates a new test clock with its time set to zero.
MT safe.
§Returns
a TestClock
cast to gst::Clock
.
sourcepub fn with_start_time(start_time: ClockTime) -> TestClock
pub fn with_start_time(start_time: ClockTime) -> TestClock
Creates a new test clock with its time set to the specified time.
MT safe.
§start_time
a GstClockTime
set to the desired start time of the clock.
§Returns
a TestClock
cast to gst::Clock
.
sourcepub fn advance_time(&self, delta: ClockTimeDiff)
pub fn advance_time(&self, delta: ClockTimeDiff)
Advances the time of the self
by the amount given by delta
. The
time of self
is monotonically increasing, therefore providing a
delta
which is negative or zero is a programming error.
MT safe.
§delta
a positive GstClockTimeDiff
to be added to the time of the clock
sourcepub fn crank(&self) -> bool
pub fn crank(&self) -> bool
A “crank” consists of three steps:
1: Wait for a GstClockID
to be registered with the TestClock
.
2: Advance the TestClock
to the time the GstClockID
is waiting, unless
the clock time is already passed the clock id (Since: 1.18).
3: Release the GstClockID
wait.
A “crank” can be though of as the notion of
manually driving the clock forward to its next logical step.
§Returns
true
if the crank was successful, false
otherwise.
MT safe.
sourcepub fn next_entry_time(&self) -> Option<ClockTime>
pub fn next_entry_time(&self) -> Option<ClockTime>
Retrieve the requested time for the next pending clock notification.
MT safe.
§Returns
a GstClockTime
set to the time of the next pending clock
notification. If no clock notifications have been requested
GST_CLOCK_TIME_NONE
will be returned.
sourcepub fn peek_id_count(&self) -> u32
pub fn peek_id_count(&self) -> u32
Determine the number of pending clock notifications that have been
requested from the self
.
MT safe.
§Returns
the number of pending clock notifications.
sourcepub fn set_time(&self, new_time: ClockTime)
pub fn set_time(&self, new_time: ClockTime)
Sets the time of self
to the time given by new_time
. The time of
self
is monotonically increasing, therefore providing a new_time
which is earlier or equal to the time of the clock as given by
[ClockExtManual::time()
][crate::gst::prelude::ClockExtManual::time()] is a programming error.
MT safe.
§new_time
a GstClockTime
later than that returned by [ClockExtManual::time()
][crate::gst::prelude::ClockExtManual::time()]
sourcepub fn wait_for_pending_id_count(&self, count: u32)
pub fn wait_for_pending_id_count(&self, count: u32)
Blocks until at least count
clock notifications have been requested from
self
. There is no timeout for this wait, see the main description of
TestClock
.
§Deprecated
use wait_for_multiple_pending_ids()
instead.
§count
the number of pending clock notifications to wait for
pub fn clock_type(&self) -> ClockType
pub fn set_clock_type(&self, clock_type: ClockType)
sourcepub fn start_time(&self) -> u64
pub fn start_time(&self) -> u64
When a TestClock
is constructed it will have a certain start time set.
If the clock was created using with_start_time()
then
this property contains the value of the start_time
argument. If
new()
was called the clock started at time zero, and thus
this property contains the value 0.
pub fn connect_clock_type_notify<F: Fn(&Self) + Send + Sync + 'static>( &self, f: F, ) -> SignalHandlerId
source§impl TestClock
impl TestClock
sourcepub fn peek_next_pending_id(&self) -> Option<ClockId>
pub fn peek_next_pending_id(&self) -> Option<ClockId>
sourcepub fn process_id(&self, pending_id: &ClockId) -> bool
pub fn process_id(&self, pending_id: &ClockId) -> bool
sourcepub fn process_id_list(&self, pending_list: &[&ClockId]) -> u32
pub fn process_id_list(&self, pending_list: &[&ClockId]) -> u32
Processes and releases the pending IDs in the list.
MT safe.
§pending_list
List
of pending GstClockIDs
sourcepub fn process_next_clock_id(&self) -> Option<ClockId>
pub fn process_next_clock_id(&self) -> Option<ClockId>
sourcepub fn wait_for_multiple_pending_ids(&self, count: u32) -> Vec<ClockId>
pub fn wait_for_multiple_pending_ids(&self, count: u32) -> Vec<ClockId>
Blocks until at least count
clock notifications have been requested from
self
. There is no timeout for this wait, see the main description of
TestClock
.
MT safe.
§count
the number of pending clock notifications to wait for
§Returns
§pending_list
Address
of a GList
pointer variable to store the list of pending GstClockIDs
that expired, or None
sourcepub fn wait_for_next_pending_id(&self) -> ClockId
pub fn wait_for_next_pending_id(&self) -> ClockId
sourcepub fn timed_wait_for_multiple_pending_ids(
&self,
count: u32,
timeout_ms: u32,
) -> (bool, Vec<ClockId>)
pub fn timed_wait_for_multiple_pending_ids( &self, count: u32, timeout_ms: u32, ) -> (bool, Vec<ClockId>)
Blocks until at least count
clock notifications have been requested from
self
, or the timeout expires.
MT safe.
§count
the number of pending clock notifications to wait for
§timeout_ms
the timeout in milliseconds
§Returns
a gboolean
true
if the waits have been registered, false
if not.
(Could be that it timed out waiting or that more waits than waits was found)
§pending_list
Address
of a GList
pointer variable to store the list of pending GstClockIDs
that expired, or None
Trait Implementations§
source§impl HasParamSpec for TestClock
impl HasParamSpec for TestClock
source§impl Ord for TestClock
impl Ord for TestClock
source§fn cmp(&self, other: &Self) -> Ordering
fn cmp(&self, other: &Self) -> Ordering
Comparison for two GObjects.
Compares the memory addresses of the provided objects.
1.21.0 · source§fn max(self, other: Self) -> Selfwhere
Self: Sized,
fn max(self, other: Self) -> Selfwhere
Self: Sized,
source§impl<OT: ObjectType> PartialEq<OT> for TestClock
impl<OT: ObjectType> PartialEq<OT> for TestClock
source§impl<OT: ObjectType> PartialOrd<OT> for TestClock
impl<OT: ObjectType> PartialOrd<OT> for TestClock
source§fn partial_cmp(&self, other: &OT) -> Option<Ordering>
fn partial_cmp(&self, other: &OT) -> Option<Ordering>
Partial comparison for two GObjects.
Compares the memory addresses of the provided objects.
1.0.0 · source§fn le(&self, other: &Rhs) -> bool
fn le(&self, other: &Rhs) -> bool
self
and other
) and is used by the <=
operator. Read moresource§impl StaticType for TestClock
impl StaticType for TestClock
source§fn static_type() -> Type
fn static_type() -> Type
Self
.impl Eq for TestClock
impl IsA<Clock> for TestClock
impl IsA<Object> for TestClock
impl Send for TestClock
impl Sync for TestClock
Auto Trait Implementations§
impl Freeze for TestClock
impl RefUnwindSafe for TestClock
impl Unpin for TestClock
impl UnwindSafe for TestClock
Blanket Implementations§
source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
source§impl<T> Cast for Twhere
T: ObjectType,
impl<T> Cast for Twhere
T: ObjectType,
source§fn upcast<T>(self) -> Twhere
T: ObjectType,
Self: IsA<T>,
fn upcast<T>(self) -> Twhere
T: ObjectType,
Self: IsA<T>,
T
. Read moresource§fn upcast_ref<T>(&self) -> &Twhere
T: ObjectType,
Self: IsA<T>,
fn upcast_ref<T>(&self) -> &Twhere
T: ObjectType,
Self: IsA<T>,
T
. Read moresource§fn downcast<T>(self) -> Result<T, Self>where
T: ObjectType,
Self: MayDowncastTo<T>,
fn downcast<T>(self) -> Result<T, Self>where
T: ObjectType,
Self: MayDowncastTo<T>,
T
. Read moresource§fn downcast_ref<T>(&self) -> Option<&T>where
T: ObjectType,
Self: MayDowncastTo<T>,
fn downcast_ref<T>(&self) -> Option<&T>where
T: ObjectType,
Self: MayDowncastTo<T>,
T
. Read moresource§fn dynamic_cast<T>(self) -> Result<T, Self>where
T: ObjectType,
fn dynamic_cast<T>(self) -> Result<T, Self>where
T: ObjectType,
T
. This handles upcasting, downcasting
and casting between interface and interface implementors. All checks are performed at
runtime, while upcast
will do many checks at compile-time already. downcast
will
perform the same checks at runtime as dynamic_cast
, but will also ensure some amount of
compile-time safety. Read moresource§fn dynamic_cast_ref<T>(&self) -> Option<&T>where
T: ObjectType,
fn dynamic_cast_ref<T>(&self) -> Option<&T>where
T: ObjectType,
T
. This handles upcasting, downcasting
and casting between interface and interface implementors. All checks are performed at
runtime, while downcast
and upcast
will do many checks at compile-time already. Read moresource§unsafe fn unsafe_cast<T>(self) -> Twhere
T: ObjectType,
unsafe fn unsafe_cast<T>(self) -> Twhere
T: ObjectType,
T
unconditionally. Read moresource§unsafe fn unsafe_cast_ref<T>(&self) -> &Twhere
T: ObjectType,
unsafe fn unsafe_cast_ref<T>(&self) -> &Twhere
T: ObjectType,
&T
unconditionally. Read moresource§impl<O> ClockExt for O
impl<O> ClockExt for O
source§fn add_observation(&self, slave: ClockTime, master: ClockTime) -> Option<f64>
fn add_observation(&self, slave: ClockTime, master: ClockTime) -> Option<f64>
master
of the master clock and the time slave
of the slave
clock are added to the list of observations. If enough observations
are available, a linear regression algorithm is run on the
observations and self
is recalibrated. Read moresource§fn add_observation_unapplied(
&self,
slave: ClockTime,
master: ClockTime,
) -> Option<(f64, ClockTime, ClockTime, ClockTime, ClockTime)>
fn add_observation_unapplied( &self, slave: ClockTime, master: ClockTime, ) -> Option<(f64, ClockTime, ClockTime, ClockTime, ClockTime)>
add_observation()
, and return the result of the master clock
estimation, without updating the internal calibration. Read moresource§fn adjust_unlocked(&self, internal: ClockTime) -> Option<ClockTime>
fn adjust_unlocked(&self, internal: ClockTime) -> Option<ClockTime>
internal
clock time to the external time, adjusting for the
rate and reference time set with ClockExtManual::set_calibration()
and making sure
that the returned time is increasing. This function should be called with the
clock’s OBJECT_LOCK held and is mainly used by clock subclasses. Read moresource§fn internal_time(&self) -> ClockTime
fn internal_time(&self) -> ClockTime
source§fn resolution(&self) -> ClockTime
fn resolution(&self) -> ClockTime
source§fn time(&self) -> Option<ClockTime>
fn time(&self) -> Option<ClockTime>
source§fn timeout(&self) -> Option<ClockTime>
fn timeout(&self) -> Option<ClockTime>
source§fn is_synced(&self) -> bool
fn is_synced(&self) -> bool
ClockFlags::NEEDS_STARTUP_SYNC
is set. Read moresource§fn set_resolution(&self, resolution: ClockTime) -> ClockTime
fn set_resolution(&self, resolution: ClockTime) -> ClockTime
ClockFlags::CAN_SET_RESOLUTION
flag set. Read moresource§fn set_synced(&self, synced: bool)
fn set_synced(&self, synced: bool)
self
to synced and emits the synced
signal, and wakes up any
thread waiting in wait_for_sync()
. Read moresource§fn set_timeout(&self, timeout: impl Into<Option<ClockTime>>)
fn set_timeout(&self, timeout: impl Into<Option<ClockTime>>)
source§fn unadjust_unlocked(&self, external: ClockTime) -> Option<ClockTime>
fn unadjust_unlocked(&self, external: ClockTime) -> Option<ClockTime>
external
clock time to the internal time of self
,
using the rate and reference time set with ClockExtManual::set_calibration()
.
This function should be called with the clock’s OBJECT_LOCK held and
is mainly used by clock subclasses. Read moresource§fn wait_for_sync(
&self,
timeout: impl Into<Option<ClockTime>>,
) -> Result<(), BoolError>
fn wait_for_sync( &self, timeout: impl Into<Option<ClockTime>>, ) -> Result<(), BoolError>
self
is synced for reporting the current time. If timeout
is GST_CLOCK_TIME_NONE
it will wait forever, otherwise it will time out
after timeout
nanoseconds. Read morefn window_size(&self) -> i32
fn set_window_size(&self, window_size: i32)
fn window_threshold(&self) -> i32
fn set_window_threshold(&self, window_threshold: i32)
source§fn connect_synced<F>(&self, f: F) -> SignalHandlerId
fn connect_synced<F>(&self, f: F) -> SignalHandlerId
ClockFlags::NEEDS_STARTUP_SYNC
set once
the clock is synchronized, or when it completely lost synchronization.
This signal will not be emitted on clocks without the flag. Read morefn connect_timeout_notify<F>(&self, f: F) -> SignalHandlerId
fn connect_window_size_notify<F>(&self, f: F) -> SignalHandlerId
fn connect_window_threshold_notify<F>(&self, f: F) -> SignalHandlerId
source§impl<O> ClockExtManual for O
impl<O> ClockExtManual for O
source§fn new_periodic_id(
&self,
start_time: ClockTime,
interval: ClockTime,
) -> PeriodicClockId
fn new_periodic_id( &self, start_time: ClockTime, interval: ClockTime, ) -> PeriodicClockId
self
to trigger a periodic notification.
The periodic notifications will start at time start_time
and
will then be fired with the given interval
. Read moresource§fn periodic_id_reinit(
&self,
id: &PeriodicClockId,
start_time: ClockTime,
interval: ClockTime,
) -> Result<(), BoolError>
fn periodic_id_reinit( &self, id: &PeriodicClockId, start_time: ClockTime, interval: ClockTime, ) -> Result<(), BoolError>
id
to the provided start time and
interval. Does not modify the reference count. Read moresource§fn new_single_shot_id(&self, time: ClockTime) -> SingleShotClockId
fn new_single_shot_id(&self, time: ClockTime) -> SingleShotClockId
source§fn single_shot_id_reinit(
&self,
id: &SingleShotClockId,
time: ClockTime,
) -> Result<(), BoolError>
fn single_shot_id_reinit( &self, id: &SingleShotClockId, time: ClockTime, ) -> Result<(), BoolError>
id
to the provided time. Does not
modify the reference count. Read morefn set_clock_flags(&self, flags: ClockFlags)
fn unset_clock_flags(&self, flags: ClockFlags)
fn clock_flags(&self) -> ClockFlags
source§fn calibration(&self) -> (ClockTime, ClockTime, u64, u64)
fn calibration(&self) -> (ClockTime, ClockTime, u64, u64)
self
. See
set_calibration()
for more information. Read moresource§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
source§default unsafe fn clone_to_uninit(&self, dst: *mut T)
default unsafe fn clone_to_uninit(&self, dst: *mut T)
clone_to_uninit
)source§impl<T> FromGlibContainerAsVec<<T as GlibPtrDefault>::GlibType, *const GList> for Twhere
T: GlibPtrDefault + FromGlibPtrNone<<T as GlibPtrDefault>::GlibType> + FromGlibPtrFull<<T as GlibPtrDefault>::GlibType>,
impl<T> FromGlibContainerAsVec<<T as GlibPtrDefault>::GlibType, *const GList> for Twhere
T: GlibPtrDefault + FromGlibPtrNone<<T as GlibPtrDefault>::GlibType> + FromGlibPtrFull<<T as GlibPtrDefault>::GlibType>,
source§impl<T> FromGlibContainerAsVec<<T as GlibPtrDefault>::GlibType, *const GPtrArray> for Twhere
T: GlibPtrDefault + FromGlibPtrNone<<T as GlibPtrDefault>::GlibType> + FromGlibPtrFull<<T as GlibPtrDefault>::GlibType>,
impl<T> FromGlibContainerAsVec<<T as GlibPtrDefault>::GlibType, *const GPtrArray> for Twhere
T: GlibPtrDefault + FromGlibPtrNone<<T as GlibPtrDefault>::GlibType> + FromGlibPtrFull<<T as GlibPtrDefault>::GlibType>,
source§impl<T> FromGlibContainerAsVec<<T as GlibPtrDefault>::GlibType, *const GSList> for Twhere
T: GlibPtrDefault + FromGlibPtrNone<<T as GlibPtrDefault>::GlibType> + FromGlibPtrFull<<T as GlibPtrDefault>::GlibType>,
impl<T> FromGlibContainerAsVec<<T as GlibPtrDefault>::GlibType, *const GSList> for Twhere
T: GlibPtrDefault + FromGlibPtrNone<<T as GlibPtrDefault>::GlibType> + FromGlibPtrFull<<T as GlibPtrDefault>::GlibType>,
source§impl<T> FromGlibContainerAsVec<<T as GlibPtrDefault>::GlibType, *mut GList> for Twhere
T: GlibPtrDefault + FromGlibPtrNone<<T as GlibPtrDefault>::GlibType> + FromGlibPtrFull<<T as GlibPtrDefault>::GlibType>,
impl<T> FromGlibContainerAsVec<<T as GlibPtrDefault>::GlibType, *mut GList> for Twhere
T: GlibPtrDefault + FromGlibPtrNone<<T as GlibPtrDefault>::GlibType> + FromGlibPtrFull<<T as GlibPtrDefault>::GlibType>,
source§impl<T> FromGlibContainerAsVec<<T as GlibPtrDefault>::GlibType, *mut GPtrArray> for Twhere
T: GlibPtrDefault + FromGlibPtrNone<<T as GlibPtrDefault>::GlibType> + FromGlibPtrFull<<T as GlibPtrDefault>::GlibType>,
impl<T> FromGlibContainerAsVec<<T as GlibPtrDefault>::GlibType, *mut GPtrArray> for Twhere
T: GlibPtrDefault + FromGlibPtrNone<<T as GlibPtrDefault>::GlibType> + FromGlibPtrFull<<T as GlibPtrDefault>::GlibType>,
source§impl<T> FromGlibContainerAsVec<<T as GlibPtrDefault>::GlibType, *mut GSList> for Twhere
T: GlibPtrDefault + FromGlibPtrNone<<T as GlibPtrDefault>::GlibType> + FromGlibPtrFull<<T as GlibPtrDefault>::GlibType>,
impl<T> FromGlibContainerAsVec<<T as GlibPtrDefault>::GlibType, *mut GSList> for Twhere
T: GlibPtrDefault + FromGlibPtrNone<<T as GlibPtrDefault>::GlibType> + FromGlibPtrFull<<T as GlibPtrDefault>::GlibType>,
source§impl<T> FromGlibPtrArrayContainerAsVec<<T as GlibPtrDefault>::GlibType, *const GList> for Twhere
T: GlibPtrDefault + FromGlibPtrNone<<T as GlibPtrDefault>::GlibType> + FromGlibPtrFull<<T as GlibPtrDefault>::GlibType>,
impl<T> FromGlibPtrArrayContainerAsVec<<T as GlibPtrDefault>::GlibType, *const GList> for Twhere
T: GlibPtrDefault + FromGlibPtrNone<<T as GlibPtrDefault>::GlibType> + FromGlibPtrFull<<T as GlibPtrDefault>::GlibType>,
unsafe fn from_glib_none_as_vec(ptr: *const GList) -> Vec<T>
unsafe fn from_glib_container_as_vec(_: *const GList) -> Vec<T>
unsafe fn from_glib_full_as_vec(_: *const GList) -> Vec<T>
source§impl<T> FromGlibPtrArrayContainerAsVec<<T as GlibPtrDefault>::GlibType, *const GPtrArray> for Twhere
T: GlibPtrDefault + FromGlibPtrNone<<T as GlibPtrDefault>::GlibType> + FromGlibPtrFull<<T as GlibPtrDefault>::GlibType>,
impl<T> FromGlibPtrArrayContainerAsVec<<T as GlibPtrDefault>::GlibType, *const GPtrArray> for Twhere
T: GlibPtrDefault + FromGlibPtrNone<<T as GlibPtrDefault>::GlibType> + FromGlibPtrFull<<T as GlibPtrDefault>::GlibType>,
unsafe fn from_glib_none_as_vec(ptr: *const GPtrArray) -> Vec<T>
unsafe fn from_glib_container_as_vec(_: *const GPtrArray) -> Vec<T>
unsafe fn from_glib_full_as_vec(_: *const GPtrArray) -> Vec<T>
source§impl<T> FromGlibPtrArrayContainerAsVec<<T as GlibPtrDefault>::GlibType, *const GSList> for Twhere
T: GlibPtrDefault + FromGlibPtrNone<<T as GlibPtrDefault>::GlibType> + FromGlibPtrFull<<T as GlibPtrDefault>::GlibType>,
impl<T> FromGlibPtrArrayContainerAsVec<<T as GlibPtrDefault>::GlibType, *const GSList> for Twhere
T: GlibPtrDefault + FromGlibPtrNone<<T as GlibPtrDefault>::GlibType> + FromGlibPtrFull<<T as GlibPtrDefault>::GlibType>,
unsafe fn from_glib_none_as_vec(ptr: *const GSList) -> Vec<T>
unsafe fn from_glib_container_as_vec(_: *const GSList) -> Vec<T>
unsafe fn from_glib_full_as_vec(_: *const GSList) -> Vec<T>
source§impl<T> FromGlibPtrArrayContainerAsVec<<T as GlibPtrDefault>::GlibType, *mut GList> for Twhere
T: GlibPtrDefault + FromGlibPtrNone<<T as GlibPtrDefault>::GlibType> + FromGlibPtrFull<<T as GlibPtrDefault>::GlibType>,
impl<T> FromGlibPtrArrayContainerAsVec<<T as GlibPtrDefault>::GlibType, *mut GList> for Twhere
T: GlibPtrDefault + FromGlibPtrNone<<T as GlibPtrDefault>::GlibType> + FromGlibPtrFull<<T as GlibPtrDefault>::GlibType>,
unsafe fn from_glib_none_as_vec(ptr: *mut GList) -> Vec<T>
unsafe fn from_glib_container_as_vec(ptr: *mut GList) -> Vec<T>
unsafe fn from_glib_full_as_vec(ptr: *mut GList) -> Vec<T>
source§impl<T> FromGlibPtrArrayContainerAsVec<<T as GlibPtrDefault>::GlibType, *mut GPtrArray> for Twhere
T: GlibPtrDefault + FromGlibPtrNone<<T as GlibPtrDefault>::GlibType> + FromGlibPtrFull<<T as GlibPtrDefault>::GlibType>,
impl<T> FromGlibPtrArrayContainerAsVec<<T as GlibPtrDefault>::GlibType, *mut GPtrArray> for Twhere
T: GlibPtrDefault + FromGlibPtrNone<<T as GlibPtrDefault>::GlibType> + FromGlibPtrFull<<T as GlibPtrDefault>::GlibType>,
unsafe fn from_glib_none_as_vec(ptr: *mut GPtrArray) -> Vec<T>
unsafe fn from_glib_container_as_vec(ptr: *mut GPtrArray) -> Vec<T>
unsafe fn from_glib_full_as_vec(ptr: *mut GPtrArray) -> Vec<T>
source§impl<T> FromGlibPtrArrayContainerAsVec<<T as GlibPtrDefault>::GlibType, *mut GSList> for Twhere
T: GlibPtrDefault + FromGlibPtrNone<<T as GlibPtrDefault>::GlibType> + FromGlibPtrFull<<T as GlibPtrDefault>::GlibType>,
impl<T> FromGlibPtrArrayContainerAsVec<<T as GlibPtrDefault>::GlibType, *mut GSList> for Twhere
T: GlibPtrDefault + FromGlibPtrNone<<T as GlibPtrDefault>::GlibType> + FromGlibPtrFull<<T as GlibPtrDefault>::GlibType>,
unsafe fn from_glib_none_as_vec(ptr: *mut GSList) -> Vec<T>
unsafe fn from_glib_container_as_vec(ptr: *mut GSList) -> Vec<T>
unsafe fn from_glib_full_as_vec(ptr: *mut GSList) -> Vec<T>
source§impl<O> GObjectExtManualGst for O
impl<O> GObjectExtManualGst for O
fn set_property_from_str(&self, name: &str, value: &str)
source§impl<O> GstObjectExt for O
impl<O> GstObjectExt for O
source§fn add_control_binding(
&self,
binding: &impl IsA<ControlBinding>,
) -> Result<(), BoolError>
fn add_control_binding( &self, binding: &impl IsA<ControlBinding>, ) -> Result<(), BoolError>
ControlBinding
to the object. If there already was a
ControlBinding
for this property it will be replaced. Read moresource§fn default_error(&self, error: &Error, debug: Option<&str>)
fn default_error(&self, error: &Error, debug: Option<&str>)
g_printerr()
to display the error message
and the optional debug string.. Read moresource§fn control_binding(&self, property_name: &str) -> Option<ControlBinding>
fn control_binding(&self, property_name: &str) -> Option<ControlBinding>
ControlBinding
for the property. This should be
unreferenced again after use. Read moresource§fn control_rate(&self) -> Option<ClockTime>
fn control_rate(&self) -> Option<ClockTime>
self
. Audio processing Element
objects will use this rate to sub-divide their processing loop and call
sync_values()
in between. The length of the processing segment
should be up to control
-rate nanoseconds. Read moresource§fn parent(&self) -> Option<Object>
fn parent(&self) -> Option<Object>
self
. This function increases the refcount
of the parent object so you should gst_object_unref()
it after usage. Read moresource§fn path_string(&self) -> GString
fn path_string(&self) -> GString
self
in
the object hierarchy. Only useful (or used) for debugging. Read moresource§fn value(
&self,
property_name: &str,
timestamp: impl Into<Option<ClockTime>>,
) -> Option<Value>
fn value( &self, property_name: &str, timestamp: impl Into<Option<ClockTime>>, ) -> Option<Value>
source§fn has_active_control_bindings(&self) -> bool
fn has_active_control_bindings(&self) -> bool
self
has active controlled properties. Read moresource§fn remove_control_binding(&self, binding: &impl IsA<ControlBinding>) -> bool
fn remove_control_binding(&self, binding: &impl IsA<ControlBinding>) -> bool
ControlBinding
. If it was the
last ref of the binding, it will be disposed. Read moresource§fn set_control_binding_disabled(&self, property_name: &str, disabled: bool)
fn set_control_binding_disabled(&self, property_name: &str, disabled: bool)
sync_values()
will do nothing for the
property. Read moresource§fn set_control_bindings_disabled(&self, disabled: bool)
fn set_control_bindings_disabled(&self, disabled: bool)
self
for
some time, i.e. sync_values()
will do nothing. Read moresource§fn set_control_rate(&self, control_rate: impl Into<Option<ClockTime>>)
fn set_control_rate(&self, control_rate: impl Into<Option<ClockTime>>)
self
. Audio processing Element
objects will use this rate to sub-divide their processing loop and call
sync_values()
in between. The length of the processing segment
should be up to control
-rate nanoseconds. Read moresource§fn set_parent(&self, parent: &impl IsA<Object>) -> Result<(), BoolError>
fn set_parent(&self, parent: &impl IsA<Object>) -> Result<(), BoolError>
self
to parent
. The object’s reference count will
be incremented, and any floating reference will be removed (see gst_object_ref_sink()
). Read moresource§fn suggest_next_sync(&self) -> Option<ClockTime>
fn suggest_next_sync(&self) -> Option<ClockTime>
source§fn sync_values(&self, timestamp: ClockTime) -> Result<(), BoolError>
fn sync_values(&self, timestamp: ClockTime) -> Result<(), BoolError>
GstControlSources
that
(maybe) handle them and for the given timestamp. Read moresource§fn unparent(&self)
fn unparent(&self)
self
, removing the associated reference.
This function decreases the refcount of self
. Read morefn connect_parent_notify<F>(&self, f: F) -> SignalHandlerId
source§impl<O> GstObjectExtManual for O
impl<O> GstObjectExtManual for O
fn connect_deep_notify<F>(&self, name: Option<&str>, f: F) -> SignalHandlerId
fn set_object_flags(&self, flags: ObjectFlags)
fn unset_object_flags(&self, flags: ObjectFlags)
fn object_flags(&self) -> ObjectFlags
fn g_value_array( &self, property_name: &str, timestamp: ClockTime, interval: ClockTime, values: &mut [Value], ) -> Result<(), BoolError>
fn object_lock(&self) -> ObjectLockGuard<'_, Self>
source§impl<T> IntoClosureReturnValue for T
impl<T> IntoClosureReturnValue for T
fn into_closure_return_value(self) -> Option<Value>
source§impl<T> IntoEither for T
impl<T> IntoEither for T
source§fn into_either(self, into_left: bool) -> Either<Self, Self>
fn into_either(self, into_left: bool) -> Either<Self, Self>
self
into a Left
variant of Either<Self, Self>
if into_left
is true
.
Converts self
into a Right
variant of Either<Self, Self>
otherwise. Read moresource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
self
into a Left
variant of Either<Self, Self>
if into_left(&self)
returns true
.
Converts self
into a Right
variant of Either<Self, Self>
otherwise. Read moresource§impl<U> IsSubclassableExt for Uwhere
U: IsClass + ParentClassIs,
impl<U> IsSubclassableExt for Uwhere
U: IsClass + ParentClassIs,
fn parent_class_init<T>(class: &mut Class<U>)
fn parent_instance_init<T>(instance: &mut InitializingObject<T>)
source§impl<T> ObjectExt for Twhere
T: ObjectType,
impl<T> ObjectExt for Twhere
T: ObjectType,
source§fn is<U>(&self) -> boolwhere
U: StaticType,
fn is<U>(&self) -> boolwhere
U: StaticType,
true
if the object is an instance of (can be cast to) T
.source§fn object_class(&self) -> &Class<Object>
fn object_class(&self) -> &Class<Object>
ObjectClass
of the object. Read moresource§fn class_of<U>(&self) -> Option<&Class<U>>where
U: IsClass,
fn class_of<U>(&self) -> Option<&Class<U>>where
U: IsClass,
T
. Read moresource§fn interface<U>(&self) -> Option<InterfaceRef<'_, U>>where
U: IsInterface,
fn interface<U>(&self) -> Option<InterfaceRef<'_, U>>where
U: IsInterface,
T
of the object. Read moresource§fn set_property_from_value(&self, property_name: &str, value: &Value)
fn set_property_from_value(&self, property_name: &str, value: &Value)
source§fn set_properties(&self, property_values: &[(&str, &dyn ToValue)])
fn set_properties(&self, property_values: &[(&str, &dyn ToValue)])
source§fn set_properties_from_value(&self, property_values: &[(&str, Value)])
fn set_properties_from_value(&self, property_values: &[(&str, Value)])
source§fn property<V>(&self, property_name: &str) -> Vwhere
V: for<'b> FromValue<'b> + 'static,
fn property<V>(&self, property_name: &str) -> Vwhere
V: for<'b> FromValue<'b> + 'static,
property_name
of the object and cast it to the type V. Read moresource§fn property_value(&self, property_name: &str) -> Value
fn property_value(&self, property_name: &str) -> Value
property_name
of the object. Read moresource§fn property_type(&self, property_name: &str) -> Option<Type>
fn property_type(&self, property_name: &str) -> Option<Type>
property_name
of this object. Read moresource§fn find_property(&self, property_name: &str) -> Option<ParamSpec>
fn find_property(&self, property_name: &str) -> Option<ParamSpec>
ParamSpec
of the property property_name
of this object.source§fn list_properties(&self) -> PtrSlice<ParamSpec>
fn list_properties(&self) -> PtrSlice<ParamSpec>
ParamSpec
of the properties of this object.source§fn freeze_notify(&self) -> PropertyNotificationFreezeGuard
fn freeze_notify(&self) -> PropertyNotificationFreezeGuard
source§unsafe fn set_qdata<QD>(&self, key: Quark, value: QD)where
QD: 'static,
unsafe fn set_qdata<QD>(&self, key: Quark, value: QD)where
QD: 'static,
key
. Read moresource§unsafe fn qdata<QD>(&self, key: Quark) -> Option<NonNull<QD>>where
QD: 'static,
unsafe fn qdata<QD>(&self, key: Quark) -> Option<NonNull<QD>>where
QD: 'static,
key
. Read moresource§unsafe fn steal_qdata<QD>(&self, key: Quark) -> Option<QD>where
QD: 'static,
unsafe fn steal_qdata<QD>(&self, key: Quark) -> Option<QD>where
QD: 'static,
key
. Read moresource§unsafe fn set_data<QD>(&self, key: &str, value: QD)where
QD: 'static,
unsafe fn set_data<QD>(&self, key: &str, value: QD)where
QD: 'static,
key
. Read moresource§unsafe fn data<QD>(&self, key: &str) -> Option<NonNull<QD>>where
QD: 'static,
unsafe fn data<QD>(&self, key: &str) -> Option<NonNull<QD>>where
QD: 'static,
key
. Read moresource§unsafe fn steal_data<QD>(&self, key: &str) -> Option<QD>where
QD: 'static,
unsafe fn steal_data<QD>(&self, key: &str) -> Option<QD>where
QD: 'static,
key
. Read moresource§fn block_signal(&self, handler_id: &SignalHandlerId)
fn block_signal(&self, handler_id: &SignalHandlerId)
source§fn unblock_signal(&self, handler_id: &SignalHandlerId)
fn unblock_signal(&self, handler_id: &SignalHandlerId)
source§fn stop_signal_emission(&self, signal_id: SignalId, detail: Option<Quark>)
fn stop_signal_emission(&self, signal_id: SignalId, detail: Option<Quark>)
source§fn stop_signal_emission_by_name(&self, signal_name: &str)
fn stop_signal_emission_by_name(&self, signal_name: &str)
source§fn connect<F>(
&self,
signal_name: &str,
after: bool,
callback: F,
) -> SignalHandlerId
fn connect<F>( &self, signal_name: &str, after: bool, callback: F, ) -> SignalHandlerId
signal_name
on this object. Read moresource§fn connect_id<F>(
&self,
signal_id: SignalId,
details: Option<Quark>,
after: bool,
callback: F,
) -> SignalHandlerId
fn connect_id<F>( &self, signal_id: SignalId, details: Option<Quark>, after: bool, callback: F, ) -> SignalHandlerId
signal_id
on this object. Read moresource§fn connect_local<F>(
&self,
signal_name: &str,
after: bool,
callback: F,
) -> SignalHandlerId
fn connect_local<F>( &self, signal_name: &str, after: bool, callback: F, ) -> SignalHandlerId
signal_name
on this object. Read moresource§fn connect_local_id<F>(
&self,
signal_id: SignalId,
details: Option<Quark>,
after: bool,
callback: F,
) -> SignalHandlerId
fn connect_local_id<F>( &self, signal_id: SignalId, details: Option<Quark>, after: bool, callback: F, ) -> SignalHandlerId
signal_id
on this object. Read moresource§unsafe fn connect_unsafe<F>(
&self,
signal_name: &str,
after: bool,
callback: F,
) -> SignalHandlerId
unsafe fn connect_unsafe<F>( &self, signal_name: &str, after: bool, callback: F, ) -> SignalHandlerId
signal_name
on this object. Read moresource§unsafe fn connect_unsafe_id<F>(
&self,
signal_id: SignalId,
details: Option<Quark>,
after: bool,
callback: F,
) -> SignalHandlerId
unsafe fn connect_unsafe_id<F>( &self, signal_id: SignalId, details: Option<Quark>, after: bool, callback: F, ) -> SignalHandlerId
signal_id
on this object. Read moresource§fn connect_closure(
&self,
signal_name: &str,
after: bool,
closure: RustClosure,
) -> SignalHandlerId
fn connect_closure( &self, signal_name: &str, after: bool, closure: RustClosure, ) -> SignalHandlerId
signal_name
on this object. Read moresource§fn connect_closure_id(
&self,
signal_id: SignalId,
details: Option<Quark>,
after: bool,
closure: RustClosure,
) -> SignalHandlerId
fn connect_closure_id( &self, signal_id: SignalId, details: Option<Quark>, after: bool, closure: RustClosure, ) -> SignalHandlerId
signal_id
on this object. Read moresource§fn watch_closure(&self, closure: &impl AsRef<Closure>)
fn watch_closure(&self, closure: &impl AsRef<Closure>)
closure
to the lifetime of the object. When
the object’s reference count drops to zero, the closure will be
invalidated. An invalidated closure will ignore any calls to
invoke_with_values
, or
invoke
when using Rust closures.source§fn emit<R>(&self, signal_id: SignalId, args: &[&dyn ToValue]) -> Rwhere
R: TryFromClosureReturnValue,
fn emit<R>(&self, signal_id: SignalId, args: &[&dyn ToValue]) -> Rwhere
R: TryFromClosureReturnValue,
source§fn emit_with_values(&self, signal_id: SignalId, args: &[Value]) -> Option<Value>
fn emit_with_values(&self, signal_id: SignalId, args: &[Value]) -> Option<Value>
Self::emit
but takes Value
for the arguments.source§fn emit_by_name<R>(&self, signal_name: &str, args: &[&dyn ToValue]) -> Rwhere
R: TryFromClosureReturnValue,
fn emit_by_name<R>(&self, signal_name: &str, args: &[&dyn ToValue]) -> Rwhere
R: TryFromClosureReturnValue,
source§fn emit_by_name_with_values(
&self,
signal_name: &str,
args: &[Value],
) -> Option<Value>
fn emit_by_name_with_values( &self, signal_name: &str, args: &[Value], ) -> Option<Value>
source§fn emit_by_name_with_details<R>(
&self,
signal_name: &str,
details: Quark,
args: &[&dyn ToValue],
) -> Rwhere
R: TryFromClosureReturnValue,
fn emit_by_name_with_details<R>(
&self,
signal_name: &str,
details: Quark,
args: &[&dyn ToValue],
) -> Rwhere
R: TryFromClosureReturnValue,
source§fn emit_by_name_with_details_and_values(
&self,
signal_name: &str,
details: Quark,
args: &[Value],
) -> Option<Value>
fn emit_by_name_with_details_and_values( &self, signal_name: &str, details: Quark, args: &[Value], ) -> Option<Value>
source§fn emit_with_details<R>(
&self,
signal_id: SignalId,
details: Quark,
args: &[&dyn ToValue],
) -> Rwhere
R: TryFromClosureReturnValue,
fn emit_with_details<R>(
&self,
signal_id: SignalId,
details: Quark,
args: &[&dyn ToValue],
) -> Rwhere
R: TryFromClosureReturnValue,
source§fn emit_with_details_and_values(
&self,
signal_id: SignalId,
details: Quark,
args: &[Value],
) -> Option<Value>
fn emit_with_details_and_values( &self, signal_id: SignalId, details: Quark, args: &[Value], ) -> Option<Value>
source§fn disconnect(&self, handler_id: SignalHandlerId)
fn disconnect(&self, handler_id: SignalHandlerId)
source§fn connect_notify<F>(&self, name: Option<&str>, f: F) -> SignalHandlerId
fn connect_notify<F>(&self, name: Option<&str>, f: F) -> SignalHandlerId
notify
signal of the object. Read moresource§fn connect_notify_local<F>(&self, name: Option<&str>, f: F) -> SignalHandlerId
fn connect_notify_local<F>(&self, name: Option<&str>, f: F) -> SignalHandlerId
notify
signal of the object. Read moresource§unsafe fn connect_notify_unsafe<F>(
&self,
name: Option<&str>,
f: F,
) -> SignalHandlerId
unsafe fn connect_notify_unsafe<F>( &self, name: Option<&str>, f: F, ) -> SignalHandlerId
notify
signal of the object. Read moresource§fn notify(&self, property_name: &str)
fn notify(&self, property_name: &str)
source§fn notify_by_pspec(&self, pspec: &ParamSpec)
fn notify_by_pspec(&self, pspec: &ParamSpec)
source§fn add_weak_ref_notify<F>(&self, f: F) -> WeakRefNotify<T>
fn add_weak_ref_notify<F>(&self, f: F) -> WeakRefNotify<T>
source§fn add_weak_ref_notify_local<F>(&self, f: F) -> WeakRefNotify<T>where
F: FnOnce() + 'static,
fn add_weak_ref_notify_local<F>(&self, f: F) -> WeakRefNotify<T>where
F: FnOnce() + 'static,
source§fn bind_property<'a, 'f, 't, O>(
&'a self,
source_property: &'a str,
target: &'a O,
target_property: &'a str,
) -> BindingBuilder<'a, 'f, 't>where
O: ObjectType,
fn bind_property<'a, 'f, 't, O>(
&'a self,
source_property: &'a str,
target: &'a O,
target_property: &'a str,
) -> BindingBuilder<'a, 'f, 't>where
O: ObjectType,
source§unsafe fn run_dispose(&self)
unsafe fn run_dispose(&self)
source§impl<T> PropertyGet for Twhere
T: HasParamSpec,
impl<T> PropertyGet for Twhere
T: HasParamSpec,
source§impl<T> StaticTypeExt for Twhere
T: StaticType,
impl<T> StaticTypeExt for Twhere
T: StaticType,
source§fn ensure_type()
fn ensure_type()
source§impl<T> ToSendValue for T
impl<T> ToSendValue for T
source§fn to_send_value(&self) -> SendValue
fn to_send_value(&self) -> SendValue
SendValue
clone of self
.