Skip to main content

DataSource

Enum DataSource 

Source
pub enum DataSource {
    File {
        path: PathBuf,
        data: Box<dyn FileReader>,
    },
    Memory(Cursor<Vec<u8>>),
    Raw {
        sample_rate: usize,
        channel_count: usize,
        samples: Vec<f32>,
    },
    RawStreaming(Box<dyn RawStreamingDataSource>),
}
Expand description

Data source enumeration. Provides unified way of selecting data source for sound buffers. It can be either a file or memory block.

Variants§

§

File

Data source is a file of any supported format.

Fields

§path: PathBuf

Path to file.

§data: Box<dyn FileReader>

Reader for reading from the source

§

Memory(Cursor<Vec<u8>>)

Data source is a memory block. Memory block must be in valid format (wav or vorbis/ogg). This variant can be used together with virtual file system.

§

Raw

Raw samples in interleaved format with specified sample rate and channel count. Can be used for procedural sounds.

§Notes

Cannot be used with streaming buffers - it makes no sense to stream data that is already loaded into memory.

Fields

§sample_rate: usize

Sample rate, typical values 22050, 44100, 48000, etc.

§channel_count: usize

Total amount of channels.

§samples: Vec<f32>

Raw samples in interleaved format. Count of samples must be multiple to channel count, otherwise you’ll get error at attempt to use such buffer.

§

RawStreaming(Box<dyn RawStreamingDataSource>)

Raw streaming source.

Implementations§

Source§

impl DataSource

Source

pub async fn from_file<P>( path: P, io: &dyn ResourceIo, ) -> Result<Self, FileError>
where P: AsRef<Path>,

Tries to create new File data source from given path. May fail if file does not exists.

Examples found in repository?
examples/streaming.rs (lines 44-48)
33fn main() {
34    // Initialize sound engine with default output device.
35    let engine = SoundEngine::new().unwrap();
36
37    // Initialize new sound context.
38    let context = SoundContext::new();
39
40    engine.state().add_context(context.clone());
41
42    // Load sound buffer.
43    let waterfall_buffer = SoundBufferResource::new_streaming(
44        block_on(DataSource::from_file(
45            "examples/data/waterfall.ogg",
46            // Load from the default resource io (File system)
47            &FsResourceIo,
48        ))
49        .unwrap(),
50    )
51    .unwrap();
52
53    // Create flat source (without spatial effects) using that buffer.
54    let source = SoundSourceBuilder::new()
55        .with_buffer(waterfall_buffer)
56        .with_status(Status::Playing)
57        .with_looping(true)
58        .build()
59        .unwrap();
60
61    // Each sound sound must be added to context, context takes ownership on source
62    // and returns pool handle to it by which it can be accessed later on if needed.
63    let _source_handle: Handle<SoundSource> = context.state().add_source(source);
64
65    thread::sleep(Duration::from_secs(30))
66}
More examples
Hide additional examples
examples/play_sound.rs (lines 44-48)
32fn main() {
33    // Initialize sound engine with default output device.
34    let engine = SoundEngine::new().unwrap();
35
36    // Create new context.
37    let context = SoundContext::new();
38
39    // Register context in the engine.
40    engine.state().add_context(context.clone());
41
42    // Load sound buffer.
43    let door_open_buffer = SoundBufferResource::new_generic(
44        fyrox_sound::futures::executor::block_on(DataSource::from_file(
45            "examples/data/door_open.wav",
46            // Load from the default resource io (File system)
47            &FsResourceIo,
48        ))
49        .unwrap(),
50    )
51    .unwrap();
52
53    // Create generic source (without spatial effects) using that buffer.
54    let source = SoundSourceBuilder::new()
55        .with_buffer(door_open_buffer)
56        .with_status(Status::Playing)
57        // Ensure that no spatial effects will be applied.
58        .with_spatial_blend_factor(0.0)
59        .build()
60        .unwrap();
61
62    // Each sound sound must be added to context, context takes ownership on source
63    // and returns pool handle to it by which it can be accessed later on if needed.
64    let _source_handle: Handle<SoundSource> = context.state().add_source(source);
65
66    // Wait until sound will play completely.
67    thread::sleep(Duration::from_secs(3));
68}
examples/play_spatial_sound.rs (lines 48-52)
37fn main() {
38    // Initialize sound engine with default output device.
39    let engine = SoundEngine::new().unwrap();
40
41    // Initialize new sound context.
42    let context = SoundContext::new();
43
44    engine.state().add_context(context.clone());
45
46    // Load sound buffer.
47    let drop_buffer = SoundBufferResource::new_generic(
48        block_on(DataSource::from_file(
49            "examples/data/drop.wav",
50            // Load from the default resource io (File system)
51            &FsResourceIo,
52        ))
53        .unwrap(),
54    )
55    .unwrap();
56
57    // Create spatial source - spatial sources can be positioned in space.
58    let source = SoundSourceBuilder::new()
59        .with_buffer(drop_buffer)
60        .with_looping(true)
61        .with_status(Status::Playing)
62        .build()
63        .unwrap();
64
65    // Each sound sound must be added to context, context takes ownership on source
66    // and returns pool handle to it by which it can be accessed later on if needed.
67    let source_handle: Handle<SoundSource> = context.state().add_source(source);
68
69    // Move sound around listener for some time.
70    let start_time = time::Instant::now();
71    let mut angle = 0.0f32;
72    while (time::Instant::now() - start_time).as_secs() < 11 {
73        let axis = Vector3::y_axis();
74        let rotation_matrix =
75            UnitQuaternion::from_axis_angle(&axis, angle.to_radians()).to_homogeneous();
76        context.state().source_mut(source_handle).set_position(
77            rotation_matrix
78                .transform_point(&Point3::new(0.0, 0.0, 3.0))
79                .coords,
80        );
81
82        angle += 3.6;
83
84        // Limit rate of updates.
85        thread::sleep(Duration::from_millis(100));
86    }
87}
examples/write_wav.rs (lines 44-48)
32fn main() {
33    // Initialize sound engine without output device.
34    let engine = SoundEngine::without_device();
35
36    // Create new context.
37    let context = SoundContext::new();
38
39    // Register context in the engine.
40    engine.state().add_context(context.clone());
41
42    // Load sound buffer.
43    let door_open_buffer = SoundBufferResource::new_generic(
44        fyrox_sound::futures::executor::block_on(DataSource::from_file(
45            "examples/data/door_open.wav",
46            // Load from the default resource io (File system)
47            &FsResourceIo,
48        ))
49        .unwrap(),
50    )
51    .unwrap();
52
53    // Create generic source (without spatial effects) using that buffer.
54    let source = SoundSourceBuilder::new()
55        .with_buffer(door_open_buffer)
56        .with_status(Status::Playing)
57        .build()
58        .unwrap();
59
60    // Each sound sound must be added to context, context takes ownership on source
61    // and returns pool handle to it by which it can be accessed later on if needed.
62    let _source_handle: Handle<SoundSource> = context.state().add_source(source);
63
64    // Create output wav file. The sample rate is currently fixed.
65    let wav_spec = hound::WavSpec {
66        channels: 2,
67        sample_rate: fyrox_sound::context::SAMPLE_RATE,
68        bits_per_sample: 32,
69        sample_format: hound::SampleFormat::Float,
70    };
71    let mut wav_writer = hound::WavWriter::create("output.wav", wav_spec).unwrap();
72
73    // Create an output buffer.
74    let buf_len = State::render_buffer_len();
75    let mut buf = vec![(0.0f32, 0.0f32); buf_len];
76    let mut samples_written = 0;
77
78    // Wait until sound will play completely.
79    while samples_written < 3 * fyrox_sound::context::SAMPLE_RATE {
80        engine.state().render(&mut buf);
81        for &(l, r) in buf.iter() {
82            wav_writer.write_sample(l).unwrap();
83            wav_writer.write_sample(r).unwrap();
84        }
85        samples_written += buf_len as u32;
86    }
87
88    wav_writer.finalize().unwrap();
89}
examples/listener.rs (lines 48-51)
37fn main() {
38    // Initialize sound engine with default output device.
39    let engine = SoundEngine::new().unwrap();
40
41    // Initialize new sound context.
42    let context = SoundContext::new();
43
44    engine.state().add_context(context.clone());
45
46    // Load sound buffer.
47    let drop_buffer = SoundBufferResource::new_generic(
48        block_on(DataSource::from_file(
49            "examples/data/drop.wav", // Load from the default resource io (File system)
50            &FsResourceIo,
51        ))
52        .unwrap(),
53    )
54    .unwrap();
55
56    // Create spatial source - spatial sources can be positioned in space.
57    let source = SoundSourceBuilder::new()
58        .with_buffer(drop_buffer)
59        .with_looping(true)
60        .with_status(Status::Playing)
61        .build()
62        .unwrap();
63
64    // Each sound sound must be added to context, context takes ownership on source
65    // and returns pool handle to it by which it can be accessed later on if needed.
66    context.state().add_source(source);
67
68    // Rotate listener for some time.
69    let start_time = time::Instant::now();
70    let mut angle = 0.0f32;
71    while (time::Instant::now() - start_time).as_secs() < 20 {
72        // Separate scope for update to make sure that mutex lock will be released before
73        // thread::sleep will be called so context can actually work in background thread.
74        {
75            let mut context = context.state();
76
77            let listener = context.listener_mut();
78
79            // Define up-axis of listener.
80            let up = Vector3::y_axis();
81
82            // And rotate look axis.
83            let rotation_matrix =
84                UnitQuaternion::from_axis_angle(&up, angle.to_radians()).to_homogeneous();
85            let look = rotation_matrix
86                .transform_point(&Point3::new(0.0, 0.0, 1.0))
87                .coords;
88
89            // Finally combine axes. _lh suffix here means that we using left-handed coordinate system.
90            // there is also _rh (right handed) version. Also basis can be set directly by using `set_basis`
91            listener.set_orientation_lh(look, *up);
92
93            // Move listener a bit back from sound source.
94            listener.set_position(Vector3::new(0.0, 0.0, -2.0));
95
96            // Continue rotation.
97            angle += 2.0;
98        }
99
100        // Limit rate of updates.
101        thread::sleep(Duration::from_millis(100));
102    }
103}
examples/hrtf.rs (lines 63-66)
42fn main() {
43    // Initialize sound engine with default output device.
44    let engine = SoundEngine::new().unwrap();
45
46    let hrir_path = PathBuf::from("examples/data/IRC_1002_C.bin");
47    let hrir_sphere = HrirSphere::from_file(&hrir_path, context::SAMPLE_RATE).unwrap();
48
49    // Initialize new sound context with default output device.
50    let context = SoundContext::new();
51
52    engine.state().add_context(context.clone());
53
54    // Set HRTF renderer instead of default.
55    context
56        .state()
57        .set_renderer(Renderer::HrtfRenderer(HrtfRenderer::new(
58            HrirSphereResource::from_hrir_sphere(hrir_sphere, ResourceKind::External),
59        )));
60
61    // Create some sounds.
62    let sound_buffer = SoundBufferResource::new_generic(
63        block_on(DataSource::from_file(
64            "examples/data/door_open.wav", // Load from the default resource io (File system)
65            &FsResourceIo,
66        ))
67        .unwrap(),
68    )
69    .unwrap();
70    let source = SoundSourceBuilder::new()
71        .with_buffer(sound_buffer)
72        .with_status(Status::Playing)
73        .build()
74        .unwrap();
75    context.state().add_source(source);
76
77    let sound_buffer = SoundBufferResource::new_generic(
78        block_on(DataSource::from_file(
79            "examples/data/helicopter.wav", // Load from the default resource io (File system)
80            &FsResourceIo,
81        ))
82        .unwrap(),
83    )
84    .unwrap();
85    let source = SoundSourceBuilder::new()
86        .with_buffer(sound_buffer)
87        .with_status(Status::Playing)
88        .with_looping(true)
89        .build()
90        .unwrap();
91    let source_handle = context.state().add_source(source);
92
93    // Move source sound around listener for some time.
94    let start_time = time::Instant::now();
95    let mut angle = 0.0f32;
96    while (time::Instant::now() - start_time).as_secs() < 360 {
97        // Separate scope for update to make sure that mutex lock will be released before
98        // thread::sleep will be called so context can actually work in background thread.
99        {
100            let axis = Vector3::y_axis();
101            let rotation_matrix =
102                UnitQuaternion::from_axis_angle(&axis, angle.to_radians()).to_homogeneous();
103            context.state().source_mut(source_handle).set_position(
104                rotation_matrix
105                    .transform_point(&Point3::new(0.0, 0.0, 3.0))
106                    .coords,
107            );
108
109            angle += 1.6;
110
111            println!(
112                "Sound render time {:?}",
113                context.state().full_render_duration()
114            );
115        }
116
117        // Limit rate of updates.
118        thread::sleep(Duration::from_millis(100));
119    }
120}
Source

pub fn from_memory(data: Vec<u8>) -> Self

Creates new data source from given memory block. This function does not checks if this is valid source or not. Data source validity will be checked on first use.

Source

pub fn path(&self) -> Option<&Path>

Tries to get a path to external data source.

Source

pub fn path_owned(&self) -> Option<PathBuf>

Tries to get a path to external data source.

Trait Implementations§

Source§

impl Debug for DataSource

Source§

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

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

impl MediaSource for DataSource

Source§

fn is_seekable(&self) -> bool

Returns if the source is seekable. This may be an expensive operation.
Source§

fn byte_len(&self) -> Option<u64>

Returns the length in bytes, if available. This may be an expensive operation.
Source§

impl Read for DataSource

Source§

fn read(&mut self, buf: &mut [u8]) -> Result<usize, Error>

Pull some bytes from this source into the specified buffer, returning how many bytes were read. Read more
1.36.0 · Source§

fn read_vectored(&mut self, bufs: &mut [IoSliceMut<'_>]) -> Result<usize, Error>

Like read, except that it reads into a slice of buffers. Read more
Source§

fn is_read_vectored(&self) -> bool

🔬This is a nightly-only experimental API. (can_vector)
Determines if this Reader has an efficient read_vectored implementation. Read more
1.0.0 · Source§

fn read_to_end(&mut self, buf: &mut Vec<u8>) -> Result<usize, Error>

Reads all bytes until EOF in this source, placing them into buf. Read more
1.0.0 · Source§

fn read_to_string(&mut self, buf: &mut String) -> Result<usize, Error>

Reads all bytes until EOF in this source, appending them to buf. Read more
1.6.0 · Source§

fn read_exact(&mut self, buf: &mut [u8]) -> Result<(), Error>

Reads the exact number of bytes required to fill buf. Read more
Source§

fn read_buf(&mut self, buf: BorrowedCursor<'_>) -> Result<(), Error>

🔬This is a nightly-only experimental API. (read_buf)
Pull some bytes from this source into the specified buffer. Read more
Source§

fn read_buf_exact(&mut self, cursor: BorrowedCursor<'_>) -> Result<(), Error>

🔬This is a nightly-only experimental API. (read_buf)
Reads the exact number of bytes required to fill cursor. Read more
1.0.0 · Source§

fn by_ref(&mut self) -> &mut Self
where Self: Sized,

Creates a “by reference” adapter for this instance of Read. Read more
1.0.0 · Source§

fn bytes(self) -> Bytes<Self>
where Self: Sized,

Transforms this Read instance to an Iterator over its bytes. Read more
1.0.0 · Source§

fn chain<R>(self, next: R) -> Chain<Self, R>
where R: Read, Self: Sized,

Creates an adapter which will chain this stream with another. Read more
1.0.0 · Source§

fn take(self, limit: u64) -> Take<Self>
where Self: Sized,

Creates an adapter which will read at most limit bytes from it. Read more
Source§

fn read_array<const N: usize>(&mut self) -> Result<[u8; N], Error>
where Self: Sized,

🔬This is a nightly-only experimental API. (read_array)
Read and return a fixed array of bytes from this source. Read more
Source§

impl Seek for DataSource

Source§

fn seek(&mut self, pos: SeekFrom) -> Result<u64, Error>

Seek to an offset, in bytes, in a stream. Read more
1.55.0 · Source§

fn rewind(&mut self) -> Result<(), Error>

Rewind to the beginning of a stream. Read more
Source§

fn stream_len(&mut self) -> Result<u64, Error>

🔬This is a nightly-only experimental API. (seek_stream_len)
Returns the length of this stream (in bytes). Read more
1.51.0 · Source§

fn stream_position(&mut self) -> Result<u64, Error>

Returns the current seek position from the start of the stream. Read more
1.80.0 · Source§

fn seek_relative(&mut self, offset: i64) -> Result<(), Error>

Seeks relative to the current position. Read more

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> AsyncTaskResult for T
where T: Any + Send + 'static,

Source§

fn into_any(self: Box<T>) -> Box<dyn Any>

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> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

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, T> IntoSample<T> for F
where T: FromSample<F>,

Source§

fn into_sample(self) -> T

Source§

impl<T, U> ObjectOrVariant<T> for U

Source§

impl<R> ReadBytesExt for R
where R: Read + ?Sized,

Source§

fn read_u8(&mut self) -> Result<u8, Error>

Reads an unsigned 8 bit integer from the underlying reader. Read more
Source§

fn read_i8(&mut self) -> Result<i8, Error>

Reads a signed 8 bit integer from the underlying reader. Read more
Source§

fn read_u16<T>(&mut self) -> Result<u16, Error>
where T: ByteOrder,

Reads an unsigned 16 bit integer from the underlying reader. Read more
Source§

fn read_i16<T>(&mut self) -> Result<i16, Error>
where T: ByteOrder,

Reads a signed 16 bit integer from the underlying reader. Read more
Source§

fn read_u24<T>(&mut self) -> Result<u32, Error>
where T: ByteOrder,

Reads an unsigned 24 bit integer from the underlying reader. Read more
Source§

fn read_i24<T>(&mut self) -> Result<i32, Error>
where T: ByteOrder,

Reads a signed 24 bit integer from the underlying reader. Read more
Source§

fn read_u32<T>(&mut self) -> Result<u32, Error>
where T: ByteOrder,

Reads an unsigned 32 bit integer from the underlying reader. Read more
Source§

fn read_i32<T>(&mut self) -> Result<i32, Error>
where T: ByteOrder,

Reads a signed 32 bit integer from the underlying reader. Read more
Source§

fn read_u48<T>(&mut self) -> Result<u64, Error>
where T: ByteOrder,

Reads an unsigned 48 bit integer from the underlying reader. Read more
Source§

fn read_i48<T>(&mut self) -> Result<i64, Error>
where T: ByteOrder,

Reads a signed 48 bit integer from the underlying reader. Read more
Source§

fn read_u64<T>(&mut self) -> Result<u64, Error>
where T: ByteOrder,

Reads an unsigned 64 bit integer from the underlying reader. Read more
Source§

fn read_i64<T>(&mut self) -> Result<i64, Error>
where T: ByteOrder,

Reads a signed 64 bit integer from the underlying reader. Read more
Source§

fn read_u128<T>(&mut self) -> Result<u128, Error>
where T: ByteOrder,

Reads an unsigned 128 bit integer from the underlying reader. Read more
Source§

fn read_i128<T>(&mut self) -> Result<i128, Error>
where T: ByteOrder,

Reads a signed 128 bit integer from the underlying reader. Read more
Source§

fn read_uint<T>(&mut self, nbytes: usize) -> Result<u64, Error>
where T: ByteOrder,

Reads an unsigned n-bytes integer from the underlying reader. Read more
Source§

fn read_int<T>(&mut self, nbytes: usize) -> Result<i64, Error>
where T: ByteOrder,

Reads a signed n-bytes integer from the underlying reader. Read more
Source§

fn read_uint128<T>(&mut self, nbytes: usize) -> Result<u128, Error>
where T: ByteOrder,

Reads an unsigned n-bytes integer from the underlying reader.
Source§

fn read_int128<T>(&mut self, nbytes: usize) -> Result<i128, Error>
where T: ByteOrder,

Reads a signed n-bytes integer from the underlying reader.
Source§

fn read_f32<T>(&mut self) -> Result<f32, Error>
where T: ByteOrder,

Reads a IEEE754 single-precision (4 bytes) floating point number from the underlying reader. Read more
Source§

fn read_f64<T>(&mut self) -> Result<f64, Error>
where T: ByteOrder,

Reads a IEEE754 double-precision (8 bytes) floating point number from the underlying reader. Read more
Source§

fn read_u16_into<T>(&mut self, dst: &mut [u16]) -> Result<(), Error>
where T: ByteOrder,

Reads a sequence of unsigned 16 bit integers from the underlying reader. Read more
Source§

fn read_u32_into<T>(&mut self, dst: &mut [u32]) -> Result<(), Error>
where T: ByteOrder,

Reads a sequence of unsigned 32 bit integers from the underlying reader. Read more
Source§

fn read_u64_into<T>(&mut self, dst: &mut [u64]) -> Result<(), Error>
where T: ByteOrder,

Reads a sequence of unsigned 64 bit integers from the underlying reader. Read more
Source§

fn read_u128_into<T>(&mut self, dst: &mut [u128]) -> Result<(), Error>
where T: ByteOrder,

Reads a sequence of unsigned 128 bit integers from the underlying reader. Read more
Source§

fn read_i8_into(&mut self, dst: &mut [i8]) -> Result<(), Error>

Reads a sequence of signed 8 bit integers from the underlying reader. Read more
Source§

fn read_i16_into<T>(&mut self, dst: &mut [i16]) -> Result<(), Error>
where T: ByteOrder,

Reads a sequence of signed 16 bit integers from the underlying reader. Read more
Source§

fn read_i32_into<T>(&mut self, dst: &mut [i32]) -> Result<(), Error>
where T: ByteOrder,

Reads a sequence of signed 32 bit integers from the underlying reader. Read more
Source§

fn read_i64_into<T>(&mut self, dst: &mut [i64]) -> Result<(), Error>
where T: ByteOrder,

Reads a sequence of signed 64 bit integers from the underlying reader. Read more
Source§

fn read_i128_into<T>(&mut self, dst: &mut [i128]) -> Result<(), Error>
where T: ByteOrder,

Reads a sequence of signed 128 bit integers from the underlying reader. Read more
Source§

fn read_f32_into<T>(&mut self, dst: &mut [f32]) -> Result<(), Error>
where T: ByteOrder,

Reads a sequence of IEEE754 single-precision (4 bytes) floating point numbers from the underlying reader. Read more
Source§

fn read_f32_into_unchecked<T>(&mut self, dst: &mut [f32]) -> Result<(), Error>
where T: ByteOrder,

👎Deprecated since 1.2.0:

please use read_f32_into instead

DEPRECATED. Read more
Source§

fn read_f64_into<T>(&mut self, dst: &mut [f64]) -> Result<(), Error>
where T: ByteOrder,

Reads a sequence of IEEE754 double-precision (8 bytes) floating point numbers from the underlying reader. Read more
Source§

fn read_f64_into_unchecked<T>(&mut self, dst: &mut [f64]) -> Result<(), Error>
where T: ByteOrder,

👎Deprecated since 1.2.0:

please use read_f64_into instead

DEPRECATED. Read more
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, 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<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