rodio/conversions/
sample.rs1use dasp_sample::{FromSample, ToSample};
2use std::marker::PhantomData;
3
4#[derive(Clone, Debug)]
6pub struct SampleTypeConverter<I, O> {
7 input: I,
8 marker: PhantomData<O>,
9}
10
11impl<I, O> SampleTypeConverter<I, O> {
12 #[inline]
14 pub fn new(input: I) -> SampleTypeConverter<I, O> {
15 SampleTypeConverter {
16 input,
17 marker: PhantomData,
18 }
19 }
20
21 #[inline]
23 pub fn into_inner(self) -> I {
24 self.input
25 }
26
27 #[inline]
29 pub fn inner_mut(&mut self) -> &mut I {
30 &mut self.input
31 }
32}
33
34impl<I, O> Iterator for SampleTypeConverter<I, O>
35where
36 I: Iterator,
37 I::Item: ToSample<O>,
38{
39 type Item = O;
40
41 #[inline]
42 fn next(&mut self) -> Option<Self::Item> {
43 self.input.next().map(|s| s.to_sample_())
44 }
45
46 #[inline]
47 fn size_hint(&self) -> (usize, Option<usize>) {
48 self.input.size_hint()
49 }
50}
51
52impl<I, O> ExactSizeIterator for SampleTypeConverter<I, O>
53where
54 I: ExactSizeIterator,
55 O: FromSample<I::Item>,
56{
57}