pub struct OptionalBusDevice<D, N> {
pub device: Option<D>,
pub next_device: N,
}Expand description
A pseudo BusDevice allowing for plugging in and out a device at run time.
Fields§
§device: Option<D>The device that can be “plugged in”.
next_device: NThe next device in the daisy chain.
Implementations§
Source§impl<D, N> OptionalBusDevice<D, N>
impl<D, N> OptionalBusDevice<D, N>
pub fn new(device: Option<D>, next_device: N) -> OptionalBusDevice<D, N>
Methods from Deref<Target = Option<D>>§
1.0.0 · Sourcepub fn as_ref(&self) -> Option<&T>
pub fn as_ref(&self) -> Option<&T>
Converts from &Option<T> to Option<&T>.
§Examples
Calculates the length of an Option<String> as an Option<usize>
without moving the String. The map method takes the self argument by value,
consuming the original, so this technique uses as_ref to first take an Option to a
reference to the value inside the original.
let text: Option<String> = Some("Hello, world!".to_string());
// First, cast `Option<String>` to `Option<&String>` with `as_ref`,
// then consume *that* with `map`, leaving `text` on the stack.
let text_length: Option<usize> = text.as_ref().map(|s| s.len());
println!("still can print text: {text:?}");1.0.0 · Sourcepub fn as_mut(&mut self) -> Option<&mut T>
pub fn as_mut(&mut self) -> Option<&mut T>
Converts from &mut Option<T> to Option<&mut T>.
§Examples
let mut x = Some(2);
match x.as_mut() {
Some(v) => *v = 42,
None => {},
}
assert_eq!(x, Some(42));1.75.0 · Sourcepub fn as_slice(&self) -> &[T]
pub fn as_slice(&self) -> &[T]
Returns a slice of the contained value, if any. If this is None, an
empty slice is returned. This can be useful to have a single type of
iterator over an Option or slice.
Note: Should you have an Option<&T> and wish to get a slice of T,
you can unpack it via opt.map_or(&[], std::slice::from_ref).
§Examples
assert_eq!(
[Some(1234).as_slice(), None.as_slice()],
[&[1234][..], &[][..]],
);The inverse of this function is (discounting
borrowing) [_]::first:
for i in [Some(1234_u16), None] {
assert_eq!(i.as_ref(), i.as_slice().first());
}1.75.0 · Sourcepub fn as_mut_slice(&mut self) -> &mut [T]
pub fn as_mut_slice(&mut self) -> &mut [T]
Returns a mutable slice of the contained value, if any. If this is
None, an empty slice is returned. This can be useful to have a
single type of iterator over an Option or slice.
Note: Should you have an Option<&mut T> instead of a
&mut Option<T>, which this method takes, you can obtain a mutable
slice via opt.map_or(&mut [], std::slice::from_mut).
§Examples
assert_eq!(
[Some(1234).as_mut_slice(), None.as_mut_slice()],
[&mut [1234][..], &mut [][..]],
);The result is a mutable slice of zero or one items that points into
our original Option:
let mut x = Some(1234);
x.as_mut_slice()[0] += 1;
assert_eq!(x, Some(1235));The inverse of this method (discounting borrowing)
is [_]::first_mut:
assert_eq!(Some(123).as_mut_slice().first_mut(), Some(&mut 123))1.40.0 · Sourcepub fn as_deref(&self) -> Option<&<T as Deref>::Target>where
T: Deref,
pub fn as_deref(&self) -> Option<&<T as Deref>::Target>where
T: Deref,
Converts from Option<T> (or &Option<T>) to Option<&T::Target>.
Leaves the original Option in-place, creating a new one with a reference
to the original one, additionally coercing the contents via Deref.
§Examples
let x: Option<String> = Some("hey".to_owned());
assert_eq!(x.as_deref(), Some("hey"));
let x: Option<String> = None;
assert_eq!(x.as_deref(), None);1.40.0 · Sourcepub fn as_deref_mut(&mut self) -> Option<&mut <T as Deref>::Target>where
T: DerefMut,
pub fn as_deref_mut(&mut self) -> Option<&mut <T as Deref>::Target>where
T: DerefMut,
Converts from Option<T> (or &mut Option<T>) to Option<&mut T::Target>.
Leaves the original Option in-place, creating a new one containing a mutable reference to
the inner type’s Deref::Target type.
§Examples
let mut x: Option<String> = Some("hey".to_owned());
assert_eq!(x.as_deref_mut().map(|x| {
x.make_ascii_uppercase();
x
}), Some("HEY".to_owned().as_mut_str()));1.0.0 · Sourcepub fn iter(&self) -> Iter<'_, T>
pub fn iter(&self) -> Iter<'_, T>
Returns an iterator over the possibly contained value.
§Examples
let x = Some(4);
assert_eq!(x.iter().next(), Some(&4));
let x: Option<u32> = None;
assert_eq!(x.iter().next(), None);1.0.0 · Sourcepub fn iter_mut(&mut self) -> IterMut<'_, T>
pub fn iter_mut(&mut self) -> IterMut<'_, T>
Returns a mutable iterator over the possibly contained value.
§Examples
let mut x = Some(4);
match x.iter_mut().next() {
Some(v) => *v = 42,
None => {},
}
assert_eq!(x, Some(42));
let mut x: Option<u32> = None;
assert_eq!(x.iter_mut().next(), None);1.53.0 · Sourcepub fn insert(&mut self, value: T) -> &mut T
pub fn insert(&mut self, value: T) -> &mut T
Inserts value into the option, then returns a mutable reference to it.
If the option already contains a value, the old value is dropped.
See also Option::get_or_insert, which doesn’t update the value if
the option already contains Some.
§Example
let mut opt = None;
let val = opt.insert(1);
assert_eq!(*val, 1);
assert_eq!(opt.unwrap(), 1);
let val = opt.insert(2);
assert_eq!(*val, 2);
*val = 3;
assert_eq!(opt.unwrap(), 3);1.20.0 · Sourcepub fn get_or_insert(&mut self, value: T) -> &mut T
pub fn get_or_insert(&mut self, value: T) -> &mut T
Inserts value into the option if it is None, then
returns a mutable reference to the contained value.
See also Option::insert, which updates the value even if
the option already contains Some.
§Examples
let mut x = None;
{
let y: &mut u32 = x.get_or_insert(5);
assert_eq!(y, &5);
*y = 7;
}
assert_eq!(x, Some(7));1.83.0 · Sourcepub fn get_or_insert_default(&mut self) -> &mut Twhere
T: Default,
pub fn get_or_insert_default(&mut self) -> &mut Twhere
T: Default,
1.20.0 · Sourcepub fn get_or_insert_with<F>(&mut self, f: F) -> &mut Twhere
F: FnOnce() -> T,
pub fn get_or_insert_with<F>(&mut self, f: F) -> &mut Twhere
F: FnOnce() -> T,
Sourcepub fn get_or_try_insert_with<'a, R, F>(
&'a mut self,
f: F,
) -> <<R as Try>::Residual as Residual<&'a mut T>>::TryType
🔬This is a nightly-only experimental API. (option_get_or_try_insert_with)
pub fn get_or_try_insert_with<'a, R, F>( &'a mut self, f: F, ) -> <<R as Try>::Residual as Residual<&'a mut T>>::TryType
option_get_or_try_insert_with)If the option is None, calls the closure and inserts its output if successful.
If the closure returns a residual value such as Err or None,
that residual value is returned and nothing is inserted.
If the option is Some, nothing is inserted.
Unless a residual is returned, a mutable reference to the value of the option will be output.
§Examples
#![feature(option_get_or_try_insert_with)]
let mut o1: Option<u32> = None;
let mut o2: Option<u8> = None;
let number = "12345";
assert_eq!(o1.get_or_try_insert_with(|| number.parse()).copied(), Ok(12345));
assert!(o2.get_or_try_insert_with(|| number.parse()).is_err());
assert_eq!(o1, Some(12345));
assert_eq!(o2, None);1.80.0 · Sourcepub fn take_if<P>(&mut self, predicate: P) -> Option<T>
pub fn take_if<P>(&mut self, predicate: P) -> Option<T>
Takes the value out of the option, but only if the predicate evaluates to
true on a mutable reference to the value.
In other words, replaces self with None if the predicate returns true.
This method operates similar to Option::take but conditional.
§Examples
let mut x = Some(42);
let prev = x.take_if(|v| if *v == 42 {
*v += 1;
false
} else {
false
});
assert_eq!(x, Some(43));
assert_eq!(prev, None);
let prev = x.take_if(|v| *v == 43);
assert_eq!(x, None);
assert_eq!(prev, Some(43));1.31.0 · Sourcepub fn replace(&mut self, value: T) -> Option<T>
pub fn replace(&mut self, value: T) -> Option<T>
Replaces the actual value in the option by the value given in parameter,
returning the old value if present,
leaving a Some in its place without deinitializing either one.
§Examples
let mut x = Some(2);
let old = x.replace(5);
assert_eq!(x, Some(5));
assert_eq!(old, Some(2));
let mut x = None;
let old = x.replace(3);
assert_eq!(x, Some(3));
assert_eq!(old, None);Trait Implementations§
Source§impl<D, N> AyAudioBusDevice for Box<OptionalBusDevice<D, N>>
impl<D, N> AyAudioBusDevice for Box<OptionalBusDevice<D, N>>
Source§impl<D, N> AyAudioBusDevice for OptionalBusDevice<D, N>
impl<D, N> AyAudioBusDevice for OptionalBusDevice<D, N>
Source§impl<D, N> BusDevice for OptionalBusDevice<D, N>
impl<D, N> BusDevice for OptionalBusDevice<D, N>
Source§type NextDevice = N
type NextDevice = N
Source§fn next_device_mut(
&mut self,
) -> &mut <OptionalBusDevice<D, N> as BusDevice>::NextDevice
fn next_device_mut( &mut self, ) -> &mut <OptionalBusDevice<D, N> as BusDevice>::NextDevice
Source§fn next_device_ref(&self) -> &<OptionalBusDevice<D, N> as BusDevice>::NextDevice
fn next_device_ref(&self) -> &<OptionalBusDevice<D, N> as BusDevice>::NextDevice
Source§fn into_next_device(self) -> <OptionalBusDevice<D, N> as BusDevice>::NextDevice
fn into_next_device(self) -> <OptionalBusDevice<D, N> as BusDevice>::NextDevice
Source§fn reset(
&mut self,
timestamp: <OptionalBusDevice<D, N> as BusDevice>::Timestamp,
)
fn reset( &mut self, timestamp: <OptionalBusDevice<D, N> as BusDevice>::Timestamp, )
Source§fn update_timestamp(
&mut self,
timestamp: <OptionalBusDevice<D, N> as BusDevice>::Timestamp,
)
fn update_timestamp( &mut self, timestamp: <OptionalBusDevice<D, N> as BusDevice>::Timestamp, )
Source§fn next_frame(
&mut self,
timestamp: <OptionalBusDevice<D, N> as BusDevice>::Timestamp,
)
fn next_frame( &mut self, timestamp: <OptionalBusDevice<D, N> as BusDevice>::Timestamp, )
Source§fn read_io(
&mut self,
port: u16,
timestamp: <OptionalBusDevice<D, N> as BusDevice>::Timestamp,
) -> Option<(u8, Option<NonZero<u16>>)>
fn read_io( &mut self, port: u16, timestamp: <OptionalBusDevice<D, N> as BusDevice>::Timestamp, ) -> Option<(u8, Option<NonZero<u16>>)>
Source§impl<D, N> Clone for OptionalBusDevice<D, N>
impl<D, N> Clone for OptionalBusDevice<D, N>
Source§fn clone(&self) -> OptionalBusDevice<D, N>
fn clone(&self) -> OptionalBusDevice<D, N>
1.0.0 (const: unstable) · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source. Read moreSource§impl<D, N> Debug for OptionalBusDevice<D, N>
impl<D, N> Debug for OptionalBusDevice<D, N>
Source§impl<D, N> Default for OptionalBusDevice<D, N>
impl<D, N> Default for OptionalBusDevice<D, N>
Source§fn default() -> OptionalBusDevice<D, N>
fn default() -> OptionalBusDevice<D, N>
Source§impl<D, N> Deref for OptionalBusDevice<D, N>
impl<D, N> Deref for OptionalBusDevice<D, N>
Source§impl<D, N> DerefMut for OptionalBusDevice<D, N>
impl<D, N> DerefMut for OptionalBusDevice<D, N>
Source§impl<'de, D, N> Deserialize<'de> for OptionalBusDevice<D, N>
impl<'de, D, N> Deserialize<'de> for OptionalBusDevice<D, N>
Source§fn deserialize<__D>(
__deserializer: __D,
) -> Result<OptionalBusDevice<D, N>, <__D as Deserializer<'de>>::Error>where
__D: Deserializer<'de>,
fn deserialize<__D>(
__deserializer: __D,
) -> Result<OptionalBusDevice<D, N>, <__D as Deserializer<'de>>::Error>where
__D: Deserializer<'de>,
Source§impl<D, N> Display for OptionalBusDevice<D, N>where
D: Display,
impl<D, N> Display for OptionalBusDevice<D, N>where
D: Display,
Source§impl<D, N> Serialize for OptionalBusDevice<D, N>
impl<D, N> Serialize for OptionalBusDevice<D, N>
Source§fn serialize<__S>(
&self,
__serializer: __S,
) -> Result<<__S as Serializer>::Ok, <__S as Serializer>::Error>where
__S: Serializer,
fn serialize<__S>(
&self,
__serializer: __S,
) -> Result<<__S as Serializer>::Ok, <__S as Serializer>::Error>where
__S: Serializer,
Auto Trait Implementations§
impl<D, N> Freeze for OptionalBusDevice<D, N>
impl<D, N> RefUnwindSafe for OptionalBusDevice<D, N>where
N: RefUnwindSafe,
D: RefUnwindSafe,
impl<D, N> Send for OptionalBusDevice<D, N>
impl<D, N> Sync for OptionalBusDevice<D, N>
impl<D, N> Unpin for OptionalBusDevice<D, N>
impl<D, N> UnsafeUnpin for OptionalBusDevice<D, N>where
N: UnsafeUnpin,
D: UnsafeUnpin,
impl<D, N> UnwindSafe for OptionalBusDevice<D, N>where
N: UnwindSafe,
D: UnwindSafe,
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
Source§impl<T> FmtForward for T
impl<T> FmtForward for T
Source§fn fmt_binary(self) -> FmtBinary<Self>where
Self: Binary,
fn fmt_binary(self) -> FmtBinary<Self>where
Self: Binary,
self to use its Binary implementation when Debug-formatted.Source§fn fmt_display(self) -> FmtDisplay<Self>where
Self: Display,
fn fmt_display(self) -> FmtDisplay<Self>where
Self: Display,
self to use its Display implementation when
Debug-formatted.Source§fn fmt_lower_exp(self) -> FmtLowerExp<Self>where
Self: LowerExp,
fn fmt_lower_exp(self) -> FmtLowerExp<Self>where
Self: LowerExp,
self to use its LowerExp implementation when
Debug-formatted.Source§fn fmt_lower_hex(self) -> FmtLowerHex<Self>where
Self: LowerHex,
fn fmt_lower_hex(self) -> FmtLowerHex<Self>where
Self: LowerHex,
self to use its LowerHex implementation when
Debug-formatted.Source§fn fmt_octal(self) -> FmtOctal<Self>where
Self: Octal,
fn fmt_octal(self) -> FmtOctal<Self>where
Self: Octal,
self to use its Octal implementation when Debug-formatted.Source§fn fmt_pointer(self) -> FmtPointer<Self>where
Self: Pointer,
fn fmt_pointer(self) -> FmtPointer<Self>where
Self: Pointer,
self to use its Pointer implementation when
Debug-formatted.Source§fn fmt_upper_exp(self) -> FmtUpperExp<Self>where
Self: UpperExp,
fn fmt_upper_exp(self) -> FmtUpperExp<Self>where
Self: UpperExp,
self to use its UpperExp implementation when
Debug-formatted.Source§fn fmt_upper_hex(self) -> FmtUpperHex<Self>where
Self: UpperHex,
fn fmt_upper_hex(self) -> FmtUpperHex<Self>where
Self: UpperHex,
self to use its UpperHex implementation when
Debug-formatted.Source§impl<S, T> IntoSample<S> for Twhere
S: FromSample<T>,
impl<S, T> IntoSample<S> for Twhere
S: FromSample<T>,
Source§fn into_sample(self) -> S
fn into_sample(self) -> S
S a sample type from self.Source§impl<T> Pipe for Twhere
T: ?Sized,
impl<T> Pipe for Twhere
T: ?Sized,
Source§fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> Rwhere
Self: Sized,
fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> Rwhere
Self: Sized,
Source§fn pipe_ref<'a, R>(&'a self, func: impl FnOnce(&'a Self) -> R) -> Rwhere
R: 'a,
fn pipe_ref<'a, R>(&'a self, func: impl FnOnce(&'a Self) -> R) -> Rwhere
R: 'a,
self and passes that borrow into the pipe function. Read moreSource§fn pipe_ref_mut<'a, R>(&'a mut self, func: impl FnOnce(&'a mut Self) -> R) -> Rwhere
R: 'a,
fn pipe_ref_mut<'a, R>(&'a mut self, func: impl FnOnce(&'a mut Self) -> R) -> Rwhere
R: 'a,
self and passes that borrow into the pipe function. Read moreSource§fn pipe_borrow<'a, B, R>(&'a self, func: impl FnOnce(&'a B) -> R) -> R
fn pipe_borrow<'a, B, R>(&'a self, func: impl FnOnce(&'a B) -> R) -> R
Source§fn pipe_borrow_mut<'a, B, R>(
&'a mut self,
func: impl FnOnce(&'a mut B) -> R,
) -> R
fn pipe_borrow_mut<'a, B, R>( &'a mut self, func: impl FnOnce(&'a mut B) -> R, ) -> R
Source§fn pipe_as_ref<'a, U, R>(&'a self, func: impl FnOnce(&'a U) -> R) -> R
fn pipe_as_ref<'a, U, R>(&'a self, func: impl FnOnce(&'a U) -> R) -> R
self, then passes self.as_ref() into the pipe function.Source§fn pipe_as_mut<'a, U, R>(&'a mut self, func: impl FnOnce(&'a mut U) -> R) -> R
fn pipe_as_mut<'a, U, R>(&'a mut self, func: impl FnOnce(&'a mut U) -> R) -> R
self, then passes self.as_mut() into the pipe
function.Source§fn pipe_deref<'a, T, R>(&'a self, func: impl FnOnce(&'a T) -> R) -> R
fn pipe_deref<'a, T, R>(&'a self, func: impl FnOnce(&'a T) -> R) -> R
self, then passes self.deref() into the pipe function.Source§impl<T> Tap for T
impl<T> Tap for T
Source§fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Self
fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Self
Borrow<B> of a value. Read moreSource§fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Self
fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Self
BorrowMut<B> of a value. Read moreSource§fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Self
fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Self
AsRef<R> view of a value. Read moreSource§fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Self
fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Self
AsMut<R> view of a value. Read moreSource§fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Self
fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Self
Deref::Target of a value. Read moreSource§fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Self
fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Self
Deref::Target of a value. Read moreSource§fn tap_dbg(self, func: impl FnOnce(&Self)) -> Self
fn tap_dbg(self, func: impl FnOnce(&Self)) -> Self
.tap() only in debug builds, and is erased in release builds.Source§fn tap_mut_dbg(self, func: impl FnOnce(&mut Self)) -> Self
fn tap_mut_dbg(self, func: impl FnOnce(&mut Self)) -> Self
.tap_mut() only in debug builds, and is erased in release
builds.Source§fn tap_borrow_dbg<B>(self, func: impl FnOnce(&B)) -> Self
fn tap_borrow_dbg<B>(self, func: impl FnOnce(&B)) -> Self
.tap_borrow() only in debug builds, and is erased in release
builds.Source§fn tap_borrow_mut_dbg<B>(self, func: impl FnOnce(&mut B)) -> Self
fn tap_borrow_mut_dbg<B>(self, func: impl FnOnce(&mut B)) -> Self
.tap_borrow_mut() only in debug builds, and is erased in release
builds.Source§fn tap_ref_dbg<R>(self, func: impl FnOnce(&R)) -> Self
fn tap_ref_dbg<R>(self, func: impl FnOnce(&R)) -> Self
.tap_ref() only in debug builds, and is erased in release
builds.Source§fn tap_ref_mut_dbg<R>(self, func: impl FnOnce(&mut R)) -> Self
fn tap_ref_mut_dbg<R>(self, func: impl FnOnce(&mut R)) -> Self
.tap_ref_mut() only in debug builds, and is erased in release
builds.Source§fn tap_deref_dbg<T>(self, func: impl FnOnce(&T)) -> Self
fn tap_deref_dbg<T>(self, func: impl FnOnce(&T)) -> Self
.tap_deref() only in debug builds, and is erased in release
builds.