Skip to main content

SoundBufferResource

Struct SoundBufferResource 

Source
#[repr(transparent)]
pub struct SoundBufferResource(pub Resource<SoundBufferState, SoundBufferResourceLoadError>);
Expand description

A shared sound buffer resource.

Tuple Fields§

§0: Resource<SoundBufferState, SoundBufferResourceLoadError>

Implementations§

Source§

impl SoundBufferResource

Source

pub fn new_streaming(data_source: DataSource) -> Result<Self, DataSource>

Tries to create new streaming sound buffer from a given data source. Returns sound source wrapped into Arc<Mutex<>> that can be directly used with sound sources.

Examples found in repository?
examples/raw_streaming.rs (line 65)
53fn main() {
54    // Initialize sound engine with default output device.
55    let engine = SoundEngine::new();
56
57    // Initialize new sound context.
58    let context = SoundContext::new();
59
60    engine.lock().unwrap().add_context(context.clone());
61
62    // Create sine wave generator
63    let sine_wave = DataSource::RawStreaming(Box::new(SamplesGenerator::new()));
64
65    let sine_wave_buffer = SoundBufferResource::new_streaming(sine_wave).unwrap();
66
67    // Create generic source (without spatial effects) using that buffer.
68    let source = GenericSourceBuilder::new()
69        .with_buffer(sine_wave_buffer)
70        .with_status(Status::Playing)
71        .build_source()
72        .unwrap();
73
74    context.state().add_source(source);
75
76    // Play sound for some time.
77    thread::sleep(Duration::from_secs(10));
78}
More examples
Hide additional examples
examples/streaming.rs (lines 21-23)
11fn main() {
12    // Initialize sound engine with default output device.
13    let engine = SoundEngine::new();
14
15    // Initialize new sound context.
16    let context = SoundContext::new();
17
18    engine.lock().unwrap().add_context(context.clone());
19
20    // Load sound buffer.
21    let waterfall_buffer = SoundBufferResource::new_streaming(
22        block_on(DataSource::from_file("examples/data/waterfall.ogg")).unwrap(),
23    )
24    .unwrap();
25
26    // Create flat source (without spatial effects) using that buffer.
27    let source = GenericSourceBuilder::new()
28        .with_buffer(waterfall_buffer)
29        .with_status(Status::Playing)
30        .with_looping(true)
31        .build_source()
32        .unwrap();
33
34    // Each sound sound must be added to context, context takes ownership on source
35    // and returns pool handle to it by which it can be accessed later on if needed.
36    let _source_handle: Handle<SoundSource> = context.state().add_source(source);
37
38    thread::sleep(Duration::from_secs(30))
39}
Source

pub fn new_generic(data_source: DataSource) -> Result<Self, DataSource>

Tries to create new generic sound buffer from a given data source. Returns sound source wrapped into Arc<Mutex<>> that can be directly used with sound sources.

Examples found in repository?
examples/play_sound.rs (lines 21-26)
10fn main() {
11    // Initialize sound engine with default output device.
12    let engine = SoundEngine::new();
13
14    // Create new context.
15    let context = SoundContext::new();
16
17    // Register context in the engine.
18    engine.lock().unwrap().add_context(context.clone());
19
20    // Load sound buffer.
21    let door_open_buffer = SoundBufferResource::new_generic(
22        rg3d_sound::futures::executor::block_on(DataSource::from_file(
23            "examples/data/door_open.wav",
24        ))
25        .unwrap(),
26    )
27    .unwrap();
28
29    // Create generic source (without spatial effects) using that buffer.
30    let source = GenericSourceBuilder::new()
31        .with_buffer(door_open_buffer)
32        .with_status(Status::Playing)
33        .build_source()
34        .unwrap();
35
36    // Each sound sound must be added to context, context takes ownership on source
37    // and returns pool handle to it by which it can be accessed later on if needed.
38    let _source_handle: Handle<SoundSource> = context.state().add_source(source);
39
40    // Wait until sound will play completely.
41    thread::sleep(Duration::from_secs(3));
42}
More examples
Hide additional examples
examples/raw_samples.rs (line 36)
9fn main() {
10    // Initialize sound engine with default output device.
11    let engine = SoundEngine::new();
12
13    // Initialize new sound context.
14    let context = SoundContext::new();
15
16    engine.lock().unwrap().add_context(context.clone());
17
18    // Create sine wave.
19    let sample_rate = 44100;
20    let sine_wave = DataSource::Raw {
21        sample_rate,
22        channel_count: 1,
23        samples: {
24            let frequency = 440.0;
25            let amplitude = 0.75;
26            (0..44100)
27                .map(|i| {
28                    amplitude
29                        * ((2.0 * std::f32::consts::PI * i as f32 * frequency) / sample_rate as f32)
30                            .sin()
31                })
32                .collect()
33        },
34    };
35
36    let sine_wave_buffer = SoundBufferResource::new_generic(sine_wave).unwrap();
37
38    // Create generic source (without spatial effects) using that buffer.
39    let source = GenericSourceBuilder::new()
40        .with_buffer(sine_wave_buffer)
41        .with_status(Status::Playing)
42        .with_looping(true)
43        .build_source()
44        .unwrap();
45
46    context.state().add_source(source);
47
48    // Play sound for some time.
49    thread::sleep(Duration::from_secs(10));
50}
examples/play_spatial_sound.rs (lines 25-27)
15fn main() {
16    // Initialize sound engine with default output device.
17    let engine = SoundEngine::new();
18
19    // Initialize new sound context.
20    let context = SoundContext::new();
21
22    engine.lock().unwrap().add_context(context.clone());
23
24    // Load sound buffer.
25    let drop_buffer = SoundBufferResource::new_generic(
26        block_on(DataSource::from_file("examples/data/drop.wav")).unwrap(),
27    )
28    .unwrap();
29
30    // Create spatial source - spatial sources can be positioned in space.
31    let source = SpatialSourceBuilder::new(
32        GenericSourceBuilder::new()
33            .with_buffer(drop_buffer)
34            .with_looping(true)
35            .with_status(Status::Playing)
36            .build()
37            .unwrap(),
38    )
39    .build_source();
40
41    // Each sound sound must be added to context, context takes ownership on source
42    // and returns pool handle to it by which it can be accessed later on if needed.
43    let source_handle: Handle<SoundSource> = context.state().add_source(source);
44
45    // Move sound around listener for some time.
46    let start_time = time::Instant::now();
47    let mut angle = 0.0f32;
48    while (time::Instant::now() - start_time).as_secs() < 11 {
49        if let SoundSource::Spatial(spatial) = context.state().source_mut(source_handle) {
50            let axis = Vector3::y_axis();
51            let rotation_matrix =
52                UnitQuaternion::from_axis_angle(&axis, angle.to_radians()).to_homogeneous();
53            spatial.set_position(
54                rotation_matrix
55                    .transform_point(&Point3::new(0.0, 0.0, 3.0))
56                    .coords,
57            );
58        }
59        angle += 3.6;
60
61        // Limit rate of updates.
62        thread::sleep(Duration::from_millis(100));
63    }
64}
examples/write_wav.rs (lines 20-25)
9fn main() {
10    // Initialize sound engine without output device.
11    let engine = SoundEngine::without_device();
12
13    // Create new context.
14    let context = SoundContext::new();
15
16    // Register context in the engine.
17    engine.lock().unwrap().add_context(context.clone());
18
19    // Load sound buffer.
20    let door_open_buffer = SoundBufferResource::new_generic(
21        rg3d_sound::futures::executor::block_on(DataSource::from_file(
22            "examples/data/door_open.wav",
23        ))
24        .unwrap(),
25    )
26    .unwrap();
27
28    // Create generic source (without spatial effects) using that buffer.
29    let source = GenericSourceBuilder::new()
30        .with_buffer(door_open_buffer)
31        .with_status(Status::Playing)
32        .build_source()
33        .unwrap();
34
35    // Each sound sound must be added to context, context takes ownership on source
36    // and returns pool handle to it by which it can be accessed later on if needed.
37    let _source_handle: Handle<SoundSource> = context.state().add_source(source);
38
39    // Create output wav file. The sample rate is currently fixed.
40    let wav_spec = hound::WavSpec {
41        channels: 2,
42        sample_rate: rg3d_sound::context::SAMPLE_RATE,
43        bits_per_sample: 32,
44        sample_format: hound::SampleFormat::Float,
45    };
46    let mut wav_writer = hound::WavWriter::create("output.wav", wav_spec).unwrap();
47
48    // Create an output buffer.
49    let buf_len = SoundEngine::render_buffer_len();
50    let mut buf = vec![(0.0f32, 0.0f32); buf_len];
51    let mut samples_written = 0;
52
53    // Wait until sound will play completely.
54    while samples_written < 3 * rg3d_sound::context::SAMPLE_RATE {
55        engine.lock().unwrap().render(&mut buf);
56        for &(l, r) in buf.iter() {
57            wav_writer.write_sample(l).unwrap();
58            wav_writer.write_sample(r).unwrap();
59        }
60        samples_written += buf_len as u32;
61    }
62
63    wav_writer.finalize().unwrap();
64}
examples/listener.rs (lines 25-27)
15fn main() {
16    // Initialize sound engine with default output device.
17    let engine = SoundEngine::new();
18
19    // Initialize new sound context.
20    let context = SoundContext::new();
21
22    engine.lock().unwrap().add_context(context.clone());
23
24    // Load sound buffer.
25    let drop_buffer = SoundBufferResource::new_generic(
26        block_on(DataSource::from_file("examples/data/drop.wav")).unwrap(),
27    )
28    .unwrap();
29
30    // Create spatial source - spatial sources can be positioned in space.
31    let source = SpatialSourceBuilder::new(
32        GenericSourceBuilder::new()
33            .with_buffer(drop_buffer)
34            .with_looping(true)
35            .with_status(Status::Playing)
36            .build()
37            .unwrap(),
38    )
39    .build_source();
40
41    // Each sound sound must be added to context, context takes ownership on source
42    // and returns pool handle to it by which it can be accessed later on if needed.
43    context.state().add_source(source);
44
45    // Rotate listener for some time.
46    let start_time = time::Instant::now();
47    let mut angle = 0.0f32;
48    while (time::Instant::now() - start_time).as_secs() < 20 {
49        // Separate scope for update to make sure that mutex lock will be released before
50        // thread::sleep will be called so context can actually work in background thread.
51        {
52            let mut context = context.state();
53
54            let listener = context.listener_mut();
55
56            // Define up-axis of listener.
57            let up = Vector3::y_axis();
58
59            // And rotate look axis.
60            let rotation_matrix =
61                UnitQuaternion::from_axis_angle(&up, angle.to_radians()).to_homogeneous();
62            let look = rotation_matrix
63                .transform_point(&Point3::new(0.0, 0.0, 1.0))
64                .coords;
65
66            // Finally combine axes. _lh suffix here means that we using left-handed coordinate system.
67            // there is also _rh (right handed) version. Also basis can be set directly by using `set_basis`
68            listener.set_orientation_lh(look, *up);
69
70            // Move listener a bit back from sound source.
71            listener.set_position(Vector3::new(0.0, 0.0, -2.0));
72
73            // Continue rotation.
74            angle += 2.0;
75        }
76
77        // Limit rate of updates.
78        thread::sleep(Duration::from_millis(100));
79    }
80}
examples/hrtf.rs (lines 35-37)
17fn main() {
18    // Initialize sound engine with default output device.
19    let engine = SoundEngine::new();
20
21    let hrir_sphere =
22        HrirSphere::from_file("examples/data/IRC_1002_C.bin", context::SAMPLE_RATE).unwrap();
23
24    // Initialize new sound context with default output device.
25    let context = SoundContext::new();
26
27    engine.lock().unwrap().add_context(context.clone());
28
29    // Set HRTF renderer instead of default.
30    context
31        .state()
32        .set_renderer(Renderer::HrtfRenderer(HrtfRenderer::new(hrir_sphere)));
33
34    // Create some sounds.
35    let sound_buffer = SoundBufferResource::new_generic(
36        block_on(DataSource::from_file("examples/data/door_open.wav")).unwrap(),
37    )
38    .unwrap();
39    let source = SpatialSourceBuilder::new(
40        GenericSourceBuilder::new()
41            .with_buffer(sound_buffer)
42            .with_status(Status::Playing)
43            .build()
44            .unwrap(),
45    )
46    .build_source();
47    context.state().add_source(source);
48
49    let sound_buffer = SoundBufferResource::new_generic(
50        block_on(DataSource::from_file("examples/data/helicopter.wav")).unwrap(),
51    )
52    .unwrap();
53    let source = SpatialSourceBuilder::new(
54        GenericSourceBuilder::new()
55            .with_buffer(sound_buffer)
56            .with_status(Status::Playing)
57            .with_looping(true)
58            .build()
59            .unwrap(),
60    )
61    .build_source();
62    let source_handle = context.state().add_source(source);
63
64    // Move source sound around listener for some time.
65    let start_time = time::Instant::now();
66    let mut angle = 0.0f32;
67    while (time::Instant::now() - start_time).as_secs() < 360 {
68        // Separate scope for update to make sure that mutex lock will be released before
69        // thread::sleep will be called so context can actually work in background thread.
70        {
71            if let SoundSource::Spatial(spatial) = context.state().source_mut(source_handle) {
72                let axis = Vector3::y_axis();
73                let rotation_matrix =
74                    UnitQuaternion::from_axis_angle(&axis, angle.to_radians()).to_homogeneous();
75                spatial.set_position(
76                    rotation_matrix
77                        .transform_point(&Point3::new(0.0, 0.0, 3.0))
78                        .coords,
79                );
80            }
81
82            angle += 1.6;
83
84            println!(
85                "Sound render time {:?}",
86                context.state().full_render_duration()
87            );
88        }
89
90        // Limit rate of updates.
91        thread::sleep(Duration::from_millis(100));
92    }
93}

Methods from Deref<Target = Resource<SoundBufferState, SoundBufferResourceLoadError>>§

Source

pub fn state(&self) -> MutexGuard<'_, RawMutex, ResourceState<T, E>>

Locks internal mutex provides access to the state.

Source

pub fn try_acquire_state( &self, ) -> Option<MutexGuard<'_, RawMutex, ResourceState<T, E>>>

Tries to lock internal mutex provides access to the state.

Source

pub fn use_count(&self) -> usize

Returns exact amount of users of the resource.

Source

pub fn key(&self) -> usize

Returns a pointer as numeric value which can be used as a hash.

Source

pub fn data_ref(&self) -> ResourceDataRef<'_, T, E>

Allows you to obtain reference to the resource data.

§Panic

An attempt to use method result will panic if resource is not loaded yet, or there was load error. Usually this is ok because normally you’d chain this call like this resource.await?.data_ref(). Every resource implements Future trait and it returns Result, so if you’ll await future then you’ll get Result, so call to data_ref will be fine.

Trait Implementations§

Source§

impl Clone for SoundBufferResource

Source§

fn clone(&self) -> SoundBufferResource

Returns a duplicate of the value. Read more
1.0.0 (const: unstable) · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for SoundBufferResource

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl Default for SoundBufferResource

Source§

fn default() -> SoundBufferResource

Returns the “default value” for a type. Read more
Source§

impl Deref for SoundBufferResource

Source§

type Target = Resource<SoundBufferState, SoundBufferResourceLoadError>

The resulting type after dereferencing.
Source§

fn deref(&self) -> &Self::Target

Dereferences the value.
Source§

impl DerefMut for SoundBufferResource

Source§

fn deref_mut(&mut self) -> &mut Self::Target

Mutably dereferences the value.
Source§

impl Future for SoundBufferResource

Source§

type Output = Result<SoundBufferResource, Option<Arc<SoundBufferResourceLoadError>>>

The type of value produced on completion.
Source§

fn poll(self: Pin<&mut Self>, cx: &mut Context<'_>) -> Poll<Self::Output>

Attempts to resolve the future to a final value, registering the current task for wakeup if the value is not yet available. Read more
Source§

impl PartialEq for SoundBufferResource

Source§

fn eq(&self, other: &SoundBufferResource) -> bool

Tests for self and other values to be equal, and is used by ==.
1.0.0 (const: unstable) · Source§

fn ne(&self, other: &Rhs) -> bool

Tests for !=. The default implementation is almost always sufficient, and should not be overridden without very good reason.
Source§

impl Visit for SoundBufferResource

Source§

fn visit(&mut self, name: &str, visitor: &mut Visitor) -> VisitResult

Source§

impl StructuralPartialEq for SoundBufferResource

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T> FutureExt for T
where T: Future + ?Sized,

Source§

fn map<U, F>(self, f: F) -> Map<Self, F>
where F: FnOnce(Self::Output) -> U, Self: Sized,

Map this future’s output to a different type, returning a new future of the resulting type. Read more
Source§

fn map_into<U>(self) -> MapInto<Self, U>
where Self::Output: Into<U>, Self: Sized,

Map this future’s output to a different type, returning a new future of the resulting type. Read more
Source§

fn then<Fut, F>(self, f: F) -> Then<Self, Fut, F>
where F: FnOnce(Self::Output) -> Fut, Fut: Future, Self: Sized,

Chain on a computation for when a future finished, passing the result of the future to the provided closure f. Read more
Source§

fn left_future<B>(self) -> Either<Self, B>
where B: Future<Output = Self::Output>, Self: Sized,

Wrap this future in an Either future, making it the left-hand variant of that Either. Read more
Source§

fn right_future<A>(self) -> Either<A, Self>
where A: Future<Output = Self::Output>, Self: Sized,

Wrap this future in an Either future, making it the right-hand variant of that Either. Read more
Source§

fn into_stream(self) -> IntoStream<Self>
where Self: Sized,

Convert this future into a single element stream. Read more
Source§

fn flatten(self) -> Flatten<Self>
where Self::Output: Future, Self: Sized,

Flatten the execution of this future when the output of this future is itself another future. Read more
Source§

fn flatten_stream(self) -> FlattenStream<Self>
where Self::Output: Stream, Self: Sized,

Flatten the execution of this future when the successful result of this future is a stream. Read more
Source§

fn fuse(self) -> Fuse<Self>
where Self: Sized,

Fuse a future such that poll will never again be called once it has completed. This method can be used to turn any Future into a FusedFuture. Read more
Source§

fn inspect<F>(self, f: F) -> Inspect<Self, F>
where F: FnOnce(&Self::Output), Self: Sized,

Do something with the output of a future before passing it on. Read more
Source§

fn catch_unwind(self) -> CatchUnwind<Self>
where Self: Sized + UnwindSafe,

Catches unwinding panics while polling the future. Read more
Source§

fn shared(self) -> Shared<Self>
where Self: Sized, Self::Output: Clone,

Create a cloneable handle to this future where all handles will resolve to the same result. Read more
Source§

fn remote_handle(self) -> (Remote<Self>, RemoteHandle<Self::Output>)
where Self: Sized,

Turn this future into a future that yields () on completion and sends its output to another future on a separate task. Read more
Source§

fn boxed<'a>(self) -> Pin<Box<dyn Future<Output = Self::Output> + Send + 'a>>
where Self: Sized + Send + 'a,

Wrap the future in a Box, pinning it. Read more
Source§

fn boxed_local<'a>(self) -> Pin<Box<dyn Future<Output = Self::Output> + 'a>>
where Self: Sized + 'a,

Wrap the future in a Box, pinning it. Read more
Source§

fn unit_error(self) -> UnitError<Self>
where Self: Sized,

Source§

fn never_error(self) -> NeverError<Self>
where Self: Sized,

Source§

fn poll_unpin(&mut self, cx: &mut Context<'_>) -> Poll<Self::Output>
where Self: Unpin,

A convenience for calling Future::poll on Unpin future types.
Source§

fn now_or_never(self) -> Option<Self::Output>
where Self: Sized,

Evaluates and consumes the future, returning the resulting output if the future is ready after the first call to Future::poll. Read more
Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<F> IntoFuture for F
where F: Future,

Source§

type Output = <F as Future>::Output

The output that the future will produce on completion.
Source§

type IntoFuture = F

Which kind of future are we turning this into?
Source§

fn into_future(self) -> <F as IntoFuture>::IntoFuture

Creates a future from a value. Read more
Source§

impl<T> PropertyValue for T
where T: Debug + 'static,

Source§

fn as_any(&self) -> &(dyn Any + 'static)

Casts self to a &dyn Any
Source§

impl<P, T> Receiver for P
where P: Deref<Target = T> + ?Sized, T: ?Sized,

Source§

type Target = T

🔬This is a nightly-only experimental API. (arbitrary_self_types)
The target type on which the method may be called.
Source§

impl<T> Same for T

Source§

type Output = T

Should always be Self
Source§

impl<SS, SP> SupersetOf<SS> for SP
where SS: SubsetOf<SP>,

Source§

fn to_subset(&self) -> Option<SS>

The inverse inclusion map: attempts to construct self from the equivalent element of its superset. Read more
Source§

fn is_in_subset(&self) -> bool

Checks if self is actually part of its subset T (and can be converted to it).
Source§

fn to_subset_unchecked(&self) -> SS

Use with care! Same as self.to_subset but without any property checks. Always succeeds.
Source§

fn from_subset(element: &SS) -> SP

The inclusion map: converts self to the equivalent element of its superset.
Source§

impl<T> ToOwned for T
where T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<F, T, E> TryFuture for F
where F: Future<Output = Result<T, E>> + ?Sized,

Source§

type Ok = T

The type of successful values yielded by this future
Source§

type Error = E

The type of failures yielded by this future
Source§

fn try_poll( self: Pin<&mut F>, cx: &mut Context<'_>, ) -> Poll<<F as Future>::Output>

Poll this TryFuture as if it were a Future. Read more
Source§

impl<Fut> TryFutureExt for Fut
where Fut: TryFuture + ?Sized,

Source§

fn flatten_sink<Item>(self) -> FlattenSink<Self, Self::Ok>
where Self::Ok: Sink<Item, Error = Self::Error>, Self: Sized,

Flattens the execution of this future when the successful result of this future is a Sink. Read more
Source§

fn map_ok<T, F>(self, f: F) -> MapOk<Self, F>
where F: FnOnce(Self::Ok) -> T, Self: Sized,

Maps this future’s success value to a different value. Read more
Source§

fn map_ok_or_else<T, E, F>(self, e: E, f: F) -> MapOkOrElse<Self, F, E>
where F: FnOnce(Self::Ok) -> T, E: FnOnce(Self::Error) -> T, Self: Sized,

Maps this future’s success value to a different value, and permits for error handling resulting in the same type. Read more
Source§

fn map_err<E, F>(self, f: F) -> MapErr<Self, F>
where F: FnOnce(Self::Error) -> E, Self: Sized,

Maps this future’s error value to a different value. Read more
Source§

fn err_into<E>(self) -> ErrInto<Self, E>
where Self: Sized, Self::Error: Into<E>,

Maps this future’s Error to a new error type using the Into trait. Read more
Source§

fn ok_into<U>(self) -> OkInto<Self, U>
where Self: Sized, Self::Ok: Into<U>,

Maps this future’s Ok to a new type using the Into trait.
Source§

fn and_then<Fut, F>(self, f: F) -> AndThen<Self, Fut, F>
where F: FnOnce(Self::Ok) -> Fut, Fut: TryFuture<Error = Self::Error>, Self: Sized,

Executes another future after this one resolves successfully. The success value is passed to a closure to create this subsequent future. Read more
Source§

fn or_else<Fut, F>(self, f: F) -> OrElse<Self, Fut, F>
where F: FnOnce(Self::Error) -> Fut, Fut: TryFuture<Ok = Self::Ok>, Self: Sized,

Executes another future if this one resolves to an error. The error value is passed to a closure to create this subsequent future. Read more
Source§

fn inspect_ok<F>(self, f: F) -> InspectOk<Self, F>
where F: FnOnce(&Self::Ok), Self: Sized,

Do something with the success value of a future before passing it on. Read more
Source§

fn inspect_err<F>(self, f: F) -> InspectErr<Self, F>
where F: FnOnce(&Self::Error), Self: Sized,

Do something with the error value of a future before passing it on. Read more
Source§

fn try_flatten(self) -> TryFlatten<Self, Self::Ok>
where Self::Ok: TryFuture<Error = Self::Error>, Self: Sized,

Flatten the execution of this future when the successful result of this future is another future. Read more
Source§

fn try_flatten_stream(self) -> TryFlattenStream<Self>
where Self::Ok: TryStream<Error = Self::Error>, Self: Sized,

Flatten the execution of this future when the successful result of this future is a stream. Read more
Source§

fn unwrap_or_else<F>(self, f: F) -> UnwrapOrElse<Self, F>
where Self: Sized, F: FnOnce(Self::Error) -> Self::Ok,

Unwraps this future’s output, producing a future with this future’s Ok type as its Output type. Read more
Source§

fn into_future(self) -> IntoFuture<Self>
where Self: Sized,

Wraps a TryFuture into a type that implements Future. Read more
Source§

fn try_poll_unpin( &mut self, cx: &mut Context<'_>, ) -> Poll<Result<Self::Ok, Self::Error>>
where Self: Unpin,

A convenience method for calling TryFuture::try_poll on Unpin future types.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
Source§

impl<V, T> VZip<V> for T
where V: MultiLane<T>,

Source§

fn vzip(self) -> V

Source§

impl<T> ResourceLoadError for T
where T: 'static + Debug + Send + Sync,

Source§

impl<T> Scalar for T
where T: 'static + Clone + PartialEq + Debug,