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) -> bool1.0.0[src]
#[must_use]fn lt(&self, other: &Rhs) -> bool1.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) -> bool1.0.0[src]
#[must_use]fn le(&self, other: &Rhs) -> bool1.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 = TThe 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>,