Struct gstreamer::promise::Promise [−][src]
pub struct Promise(_);
v1_14
only.The crate::Promise
object implements the container for values that may
be available later. i.e. a Future or a Promise in
https://en.wikipedia.org/wiki/Futures_and_promises.
As with all Future/Promise-like functionality, there is the concept of the
producer of the value and the consumer of the value.
A crate::Promise
is created with Self::new()
by the consumer and passed
to the producer to avoid thread safety issues with the change callback.
A crate::Promise
can be replied to with a value (or an error) by the producer
with Self::reply()
. The exact value returned is defined by the API
contract of the producer and None
may be a valid reply.
Self::interrupt()
is for the consumer to
indicate to the producer that the value is not needed anymore and producing
that value can stop. The crate::PromiseResult::Expired
(XXX: @-reference does not belong to Promise!) state set by a call
to Self::expire()
indicates to the consumer that a value will never
be produced and is intended to be called by a third party that implements
some notion of message handling such as crate::Bus
.
A callback can also be installed at crate::Promise
creation for
result changes with [Self::new_with_change_func()
].
The change callback can be used to chain GstPromises
’s together as in the
following example.
const GstStructure *reply;
GstPromise *p;
if (gst_promise_wait (promise) != GST_PROMISE_RESULT_REPLIED)
return; // interrupted or expired value
reply = gst_promise_get_reply (promise);
if (error in reply)
return; // propagate error
p = gst_promise_new_with_change_func (another_promise_change_func, user_data, notify);
pass p to promise-using API
Each crate::Promise
starts out with a crate::PromiseResult
of
crate::PromiseResult::Pending
and only ever transitions once
into one of the other crate::PromiseResult
’s.
In order to support multi-threaded code, Self::reply()
,
Self::interrupt()
and Self::expire()
may all be from
different threads with some restrictions and the final result of the promise
is whichever call is made first. There are two restrictions on ordering:
- That
Self::reply()
andSelf::interrupt()
cannot be called afterSelf::expire()
- That
Self::reply()
andSelf::interrupt()
cannot be called twice.
The change function set with [Self::new_with_change_func()
] is
called directly from either the Self::reply()
,
Self::interrupt()
or Self::expire()
and can be called
from an arbitrary thread. crate::Promise
using APIs can restrict this to
a single thread or a subset of threads but that is entirely up to the API
that uses crate::Promise
.
Implementations
impl Promise
[src]
impl Promise
[src]pub fn new() -> Promise
[src]
pub fn new() -> Promise
[src]Returns
a new crate::Promise
pub fn with_change_func<F>(func: F) -> Promise where
F: FnOnce(Result<Option<&StructureRef>, PromiseError>) + Send + 'static,
[src]
F: FnOnce(Result<Option<&StructureRef>, PromiseError>) + Send + 'static,
pub fn new_future() -> (Self, PromiseFuture)
[src]
pub fn expire(&self)
[src]
pub fn expire(&self)
[src]Expire a self
. This will wake up any waiters with
crate::PromiseResult::Expired
. Called by a message loop when the parent
message is handled and/or destroyed (possibly unanswered).
pub fn get_reply(&self) -> Option<&StructureRef>
[src]
pub fn get_reply(&self) -> Option<&StructureRef>
[src]Retrieve the reply set on self
. self
must be in
crate::PromiseResult::Replied
and the returned structure is owned by self
Returns
The reply set on self
pub fn interrupt(&self)
[src]
pub fn interrupt(&self)
[src]Interrupt waiting for a self
. This will wake up any waiters with
crate::PromiseResult::Interrupted
. Called when the consumer does not want
the value produced anymore.
pub fn reply(&self, s: Option<Structure>)
[src]
pub fn reply(&self, s: Option<Structure>)
[src]Set a reply on self
. This will wake up any waiters with
crate::PromiseResult::Replied
. Called by the producer of the value to
indicate success (or failure).
If self
has already been interrupted by the consumer, then this reply
is not visible to the consumer.
s
a crate::Structure
with the the reply contents
pub fn wait(&self) -> PromiseResult
[src]
pub fn wait(&self) -> PromiseResult
[src]Wait for self
to move out of the crate::PromiseResult::Pending
state.
If self
is not in crate::PromiseResult::Pending
then it will return
immediately with the current result.
Returns
the result of the promise
Trait Implementations
impl Ord for Promise
[src]
impl Ord for Promise
[src]impl PartialOrd<Promise> for Promise
[src]
impl PartialOrd<Promise> for Promise
[src]fn partial_cmp(&self, other: &Promise) -> Option<Ordering>
[src]
fn partial_cmp(&self, other: &Promise) -> Option<Ordering>
[src]This method returns an ordering between self
and other
values if one exists. Read more
#[must_use]fn lt(&self, other: &Rhs) -> bool
1.0.0[src]
#[must_use]fn lt(&self, other: &Rhs) -> bool
1.0.0[src]This method tests less than (for self
and other
) and is used by the <
operator. Read more
#[must_use]fn le(&self, other: &Rhs) -> bool
1.0.0[src]
#[must_use]fn le(&self, other: &Rhs) -> bool
1.0.0[src]This method tests less than or equal to (for self
and other
) and is used by the <=
operator. Read more
impl StaticType for Promise
[src]
impl StaticType for Promise
[src]fn static_type() -> Type
[src]
fn static_type() -> Type
[src]Returns the type identifier of Self
.
impl Eq for Promise
[src]
impl Send for Promise
[src]
impl StructuralEq for Promise
[src]
impl StructuralPartialEq for Promise
[src]
impl Sync for Promise
[src]
Auto Trait Implementations
Blanket Implementations
impl<T> BorrowMut<T> for T where
T: ?Sized,
[src]
impl<T> BorrowMut<T> for T where
T: ?Sized,
[src]pub fn borrow_mut(&mut self) -> &mut T
[src]
pub fn borrow_mut(&mut self) -> &mut T
[src]Mutably borrows from an owned value. Read more
impl<T> ToOwned for T where
T: Clone,
[src]
impl<T> ToOwned for T where
T: Clone,
[src]type Owned = T
type Owned = T
The resulting type after obtaining ownership.
pub fn to_owned(&self) -> T
[src]
pub fn to_owned(&self) -> T
[src]Creates owned data from borrowed data, usually by cloning. Read more
pub fn clone_into(&self, target: &mut T)
[src]
pub fn clone_into(&self, target: &mut T)
[src]🔬 This is a nightly-only experimental API. (toowned_clone_into
)
recently added
Uses borrowed data to replace owned data, usually by cloning. Read more
impl<T> ToSendValue for T where
T: Send + ToValue + ?Sized,
[src]
impl<T> ToSendValue for T where
T: Send + ToValue + ?Sized,
[src]pub fn to_send_value(&self) -> SendValue
[src]
pub fn to_send_value(&self) -> SendValue
[src]Returns a SendValue
clone of self
.
impl<'a, T, C> FromValueOptional<'a> for T where
C: ValueTypeChecker<Error = ValueTypeMismatchOrNoneError>,
T: FromValue<'a, Checker = C>,
[src]
C: ValueTypeChecker<Error = ValueTypeMismatchOrNoneError>,
T: FromValue<'a, Checker = C>,