Struct SDL_PixelFormat

#[repr(transparent)]
pub struct SDL_PixelFormat(pub i32);
Available on crate feature dep_sdl3 only.
Expand description

Pixel format.

SDL’s pixel formats have the following naming convention:

  • Names with a list of components and a single bit count, such as RGB24 and ABGR32, define a platform-independent encoding into bytes in the order specified. For example, in RGB24 data, each pixel is encoded in 3 bytes (red, green, blue) in that order, and in ABGR32 data, each pixel is encoded in 4 bytes alpha, blue, green, red) in that order. Use these names if the property of a format that is important to you is the order of the bytes in memory or on disk.
  • Names with a bit count per component, such as ARGB8888 and XRGB1555, are “packed” into an appropriately-sized integer in the platform’s native endianness. For example, ARGB8888 is a sequence of 32-bit integers; in each integer, the most significant bits are alpha, and the least significant bits are blue. On a little-endian CPU such as x86, the least significant bits of each integer are arranged first in memory, but on a big-endian CPU such as s390x, the most significant bits are arranged first. Use these names if the property of a format that is important to you is the meaning of each bit position within a native-endianness integer.
  • In indexed formats such as INDEX4LSB, each pixel is represented by encoding an index into the palette into the indicated number of bits, with multiple pixels packed into each byte if appropriate. In LSB formats, the first (leftmost) pixel is stored in the least-significant bits of the byte; in MSB formats, it’s stored in the most-significant bits. INDEX8 does not need LSB/MSB variants, because each pixel exactly fills one byte.

The 32-bit byte-array encodings such as RGBA32 are aliases for the appropriate 8888 encoding for the current platform. For example, RGBA32 is an alias for ABGR8888 on little-endian CPUs like x86, or an alias for RGBA8888 on big-endian CPUs.

§Availability

This enum is available since SDL 3.2.0.

§Known values (sdl3-sys)

Associated constantGlobal constantDescription
UNKNOWNSDL_PIXELFORMAT_UNKNOWN
INDEX1LSBSDL_PIXELFORMAT_INDEX1LSB
INDEX1MSBSDL_PIXELFORMAT_INDEX1MSB
INDEX2LSBSDL_PIXELFORMAT_INDEX2LSB
INDEX2MSBSDL_PIXELFORMAT_INDEX2MSB
INDEX4LSBSDL_PIXELFORMAT_INDEX4LSB
INDEX4MSBSDL_PIXELFORMAT_INDEX4MSB
INDEX8SDL_PIXELFORMAT_INDEX8
RGB332SDL_PIXELFORMAT_RGB332
XRGB4444SDL_PIXELFORMAT_XRGB4444
XBGR4444SDL_PIXELFORMAT_XBGR4444
XRGB1555SDL_PIXELFORMAT_XRGB1555
XBGR1555SDL_PIXELFORMAT_XBGR1555
ARGB4444SDL_PIXELFORMAT_ARGB4444
RGBA4444SDL_PIXELFORMAT_RGBA4444
ABGR4444SDL_PIXELFORMAT_ABGR4444
BGRA4444SDL_PIXELFORMAT_BGRA4444
ARGB1555SDL_PIXELFORMAT_ARGB1555
RGBA5551SDL_PIXELFORMAT_RGBA5551
ABGR1555SDL_PIXELFORMAT_ABGR1555
BGRA5551SDL_PIXELFORMAT_BGRA5551
RGB565SDL_PIXELFORMAT_RGB565
BGR565SDL_PIXELFORMAT_BGR565
RGB24SDL_PIXELFORMAT_RGB24
BGR24SDL_PIXELFORMAT_BGR24
XRGB8888SDL_PIXELFORMAT_XRGB8888
RGBX8888SDL_PIXELFORMAT_RGBX8888
XBGR8888SDL_PIXELFORMAT_XBGR8888
BGRX8888SDL_PIXELFORMAT_BGRX8888
ARGB8888SDL_PIXELFORMAT_ARGB8888
RGBA8888SDL_PIXELFORMAT_RGBA8888
ABGR8888SDL_PIXELFORMAT_ABGR8888
BGRA8888SDL_PIXELFORMAT_BGRA8888
XRGB2101010SDL_PIXELFORMAT_XRGB2101010
XBGR2101010SDL_PIXELFORMAT_XBGR2101010
ARGB2101010SDL_PIXELFORMAT_ARGB2101010
ABGR2101010SDL_PIXELFORMAT_ABGR2101010
RGB48SDL_PIXELFORMAT_RGB48
BGR48SDL_PIXELFORMAT_BGR48
RGBA64SDL_PIXELFORMAT_RGBA64
ARGB64SDL_PIXELFORMAT_ARGB64
BGRA64SDL_PIXELFORMAT_BGRA64
ABGR64SDL_PIXELFORMAT_ABGR64
RGB48_FLOATSDL_PIXELFORMAT_RGB48_FLOAT
BGR48_FLOATSDL_PIXELFORMAT_BGR48_FLOAT
RGBA64_FLOATSDL_PIXELFORMAT_RGBA64_FLOAT
ARGB64_FLOATSDL_PIXELFORMAT_ARGB64_FLOAT
BGRA64_FLOATSDL_PIXELFORMAT_BGRA64_FLOAT
ABGR64_FLOATSDL_PIXELFORMAT_ABGR64_FLOAT
RGB96_FLOATSDL_PIXELFORMAT_RGB96_FLOAT
BGR96_FLOATSDL_PIXELFORMAT_BGR96_FLOAT
RGBA128_FLOATSDL_PIXELFORMAT_RGBA128_FLOAT
ARGB128_FLOATSDL_PIXELFORMAT_ARGB128_FLOAT
BGRA128_FLOATSDL_PIXELFORMAT_BGRA128_FLOAT
ABGR128_FLOATSDL_PIXELFORMAT_ABGR128_FLOAT
YV12SDL_PIXELFORMAT_YV12Planar mode: Y + V + U (3 planes)
IYUVSDL_PIXELFORMAT_IYUVPlanar mode: Y + U + V (3 planes)
YUY2SDL_PIXELFORMAT_YUY2Packed mode: Y0+U0+Y1+V0 (1 plane)
UYVYSDL_PIXELFORMAT_UYVYPacked mode: U0+Y0+V0+Y1 (1 plane)
YVYUSDL_PIXELFORMAT_YVYUPacked mode: Y0+V0+Y1+U0 (1 plane)
NV12SDL_PIXELFORMAT_NV12Planar mode: Y + U/V interleaved (2 planes)
NV21SDL_PIXELFORMAT_NV21Planar mode: Y + V/U interleaved (2 planes)
P010SDL_PIXELFORMAT_P010Planar mode: Y + U/V interleaved (2 planes)
EXTERNAL_OESSDL_PIXELFORMAT_EXTERNAL_OESAndroid video texture format
RGBA32SDL_PIXELFORMAT_RGBA32(target dependent)
ARGB32SDL_PIXELFORMAT_ARGB32(target dependent)
BGRA32SDL_PIXELFORMAT_BGRA32(target dependent)
ABGR32SDL_PIXELFORMAT_ABGR32(target dependent)
RGBX32SDL_PIXELFORMAT_RGBX32(target dependent)
XRGB32SDL_PIXELFORMAT_XRGB32(target dependent)
BGRX32SDL_PIXELFORMAT_BGRX32(target dependent)
XBGR32SDL_PIXELFORMAT_XBGR32(target dependent)

Tuple Fields§

§0: i32

Implementations§

§

impl SDL_PixelFormat

pub const UNKNOWN: SDL_PixelFormat

pub const INDEX1LSB: SDL_PixelFormat

pub const INDEX1MSB: SDL_PixelFormat

pub const INDEX2LSB: SDL_PixelFormat

pub const INDEX2MSB: SDL_PixelFormat

pub const INDEX4LSB: SDL_PixelFormat

pub const INDEX4MSB: SDL_PixelFormat

pub const INDEX8: SDL_PixelFormat

pub const RGB332: SDL_PixelFormat

pub const XRGB4444: SDL_PixelFormat

pub const XBGR4444: SDL_PixelFormat

pub const XRGB1555: SDL_PixelFormat

pub const XBGR1555: SDL_PixelFormat

pub const ARGB4444: SDL_PixelFormat

pub const RGBA4444: SDL_PixelFormat

pub const ABGR4444: SDL_PixelFormat

pub const BGRA4444: SDL_PixelFormat

pub const ARGB1555: SDL_PixelFormat

pub const RGBA5551: SDL_PixelFormat

pub const ABGR1555: SDL_PixelFormat

pub const BGRA5551: SDL_PixelFormat

pub const RGB565: SDL_PixelFormat

pub const BGR565: SDL_PixelFormat

pub const RGB24: SDL_PixelFormat

pub const BGR24: SDL_PixelFormat

pub const XRGB8888: SDL_PixelFormat

pub const RGBX8888: SDL_PixelFormat

pub const XBGR8888: SDL_PixelFormat

pub const BGRX8888: SDL_PixelFormat

pub const ARGB8888: SDL_PixelFormat

pub const RGBA8888: SDL_PixelFormat

pub const ABGR8888: SDL_PixelFormat

pub const BGRA8888: SDL_PixelFormat

pub const XRGB2101010: SDL_PixelFormat

pub const XBGR2101010: SDL_PixelFormat

pub const ARGB2101010: SDL_PixelFormat

pub const ABGR2101010: SDL_PixelFormat

pub const RGB48: SDL_PixelFormat

pub const BGR48: SDL_PixelFormat

pub const RGBA64: SDL_PixelFormat

pub const ARGB64: SDL_PixelFormat

pub const BGRA64: SDL_PixelFormat

pub const ABGR64: SDL_PixelFormat

pub const RGB48_FLOAT: SDL_PixelFormat

pub const BGR48_FLOAT: SDL_PixelFormat

pub const RGBA64_FLOAT: SDL_PixelFormat

pub const ARGB64_FLOAT: SDL_PixelFormat

pub const BGRA64_FLOAT: SDL_PixelFormat

pub const ABGR64_FLOAT: SDL_PixelFormat

pub const RGB96_FLOAT: SDL_PixelFormat

pub const BGR96_FLOAT: SDL_PixelFormat

pub const RGBA128_FLOAT: SDL_PixelFormat

pub const ARGB128_FLOAT: SDL_PixelFormat

pub const BGRA128_FLOAT: SDL_PixelFormat

pub const ABGR128_FLOAT: SDL_PixelFormat

pub const YV12: SDL_PixelFormat

Planar mode: Y + V + U (3 planes)

pub const IYUV: SDL_PixelFormat

Planar mode: Y + U + V (3 planes)

pub const YUY2: SDL_PixelFormat

Packed mode: Y0+U0+Y1+V0 (1 plane)

pub const UYVY: SDL_PixelFormat

Packed mode: U0+Y0+V0+Y1 (1 plane)

pub const YVYU: SDL_PixelFormat

Packed mode: Y0+V0+Y1+U0 (1 plane)

pub const NV12: SDL_PixelFormat

Planar mode: Y + U/V interleaved (2 planes)

pub const NV21: SDL_PixelFormat

Planar mode: Y + V/U interleaved (2 planes)

pub const P010: SDL_PixelFormat

Planar mode: Y + U/V interleaved (2 planes)

pub const EXTERNAL_OES: SDL_PixelFormat

Android video texture format

pub const RGBA32: SDL_PixelFormat = SDL_PIXELFORMAT_ABGR8888

pub const ARGB32: SDL_PixelFormat = SDL_PIXELFORMAT_BGRA8888

pub const BGRA32: SDL_PixelFormat = SDL_PIXELFORMAT_ARGB8888

pub const ABGR32: SDL_PixelFormat = SDL_PIXELFORMAT_RGBA8888

pub const RGBX32: SDL_PixelFormat = SDL_PIXELFORMAT_XBGR8888

pub const XRGB32: SDL_PixelFormat = SDL_PIXELFORMAT_BGRX8888

pub const BGRX32: SDL_PixelFormat = SDL_PIXELFORMAT_XRGB8888

pub const XBGR32: SDL_PixelFormat = SDL_PIXELFORMAT_RGBX8888

Trait Implementations§

§

impl Clone for SDL_PixelFormat

§

fn clone(&self) -> SDL_PixelFormat

Returns a copy of the value. Read more
1.0.0 · Source§

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

Performs copy-assignment from source. Read more
§

impl Default for SDL_PixelFormat

§

fn default() -> SDL_PixelFormat

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

impl From<PixelFormat> for SDL_PixelFormat

§

fn from(pf: PixelFormat) -> SDL_PixelFormat

Converts to this type from the input type.
§

impl From<SDL_PixelFormat> for i32

§

fn from(value: SDL_PixelFormat) -> i32

Converts to this type from the input type.
§

impl Hash for SDL_PixelFormat

§

fn hash<__H>(&self, state: &mut __H)
where __H: Hasher,

Feeds this value into the given Hasher. Read more
1.3.0 · Source§

fn hash_slice<H>(data: &[Self], state: &mut H)
where H: Hasher, Self: Sized,

Feeds a slice of this type into the given Hasher. Read more
§

impl Ord for SDL_PixelFormat

§

fn cmp(&self, other: &SDL_PixelFormat) -> Ordering

This method returns an Ordering between self and other. Read more
1.21.0 · Source§

fn max(self, other: Self) -> Self
where Self: Sized,

Compares and returns the maximum of two values. Read more
1.21.0 · Source§

fn min(self, other: Self) -> Self
where Self: Sized,

Compares and returns the minimum of two values. Read more
1.50.0 · Source§

fn clamp(self, min: Self, max: Self) -> Self
where Self: Sized,

Restrict a value to a certain interval. Read more
§

impl PartialEq for SDL_PixelFormat

§

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

Tests for self and other values to be equal, and is used by ==.
1.0.0 · 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.
§

impl PartialOrd for SDL_PixelFormat

§

fn partial_cmp(&self, other: &SDL_PixelFormat) -> Option<Ordering>

This method returns an ordering between self and other values if one exists. Read more
1.0.0 · Source§

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

Tests less than (for self and other) and is used by the < operator. Read more
1.0.0 · Source§

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

Tests less than or equal to (for self and other) and is used by the <= operator. Read more
1.0.0 · Source§

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

Tests greater than (for self and other) and is used by the > operator. Read more
1.0.0 · Source§

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

Tests greater than or equal to (for self and other) and is used by the >= operator. Read more
§

impl TryFrom<SDL_PixelFormat> for PixelFormat

§

type Error = Error

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

fn try_from( format: SDL_PixelFormat, ) -> Result<PixelFormat, <PixelFormat as TryFrom<SDL_PixelFormat>>::Error>

Performs the conversion.
§

impl Copy for SDL_PixelFormat

§

impl Eq for SDL_PixelFormat

§

impl StructuralPartialEq for SDL_PixelFormat

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

Source§

const BYTE_ALIGN: usize = _

The alignment of this type in bytes.
Source§

const BYTE_SIZE: usize = _

The size of this type in bytes.
Source§

fn byte_align(&self) -> usize

Returns the alignment of this type in bytes.
Source§

fn byte_size(&self) -> usize

Returns the size of this type in bytes. Read more
Source§

fn ptr_size_ratio(&self) -> [usize; 2]

Returns the size ratio between Ptr::BYTES and BYTE_SIZE. Read more
Source§

impl<T, R> Chain<R> for T
where T: ?Sized,

Source§

fn chain<F>(self, f: F) -> R
where F: FnOnce(Self) -> R, Self: Sized,

Chain a function which takes the parameter by value.
Source§

fn chain_ref<F>(&self, f: F) -> R
where F: FnOnce(&Self) -> R,

Chain a function which takes the parameter by shared reference.
Source§

fn chain_mut<F>(&mut self, f: F) -> R
where F: FnOnce(&mut Self) -> R,

Chain a function which takes the parameter by exclusive reference.
Source§

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

Source§

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

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

impl<Q, K> Comparable<K> for Q
where Q: Ord + ?Sized, K: Borrow<Q> + ?Sized,

§

fn compare(&self, key: &K) -> Ordering

Compare self to key and return their ordering.
§

impl<Q, K> Equivalent<K> for Q
where Q: Eq + ?Sized, K: Borrow<Q> + ?Sized,

§

fn equivalent(&self, key: &K) -> bool

Compare self to key and return true if they are equal.
Source§

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

Source§

fn type_id() -> TypeId

Returns the TypeId of Self. Read more
Source§

fn type_of(&self) -> TypeId

Returns the TypeId of self. Read more
Source§

fn type_name(&self) -> &'static str

Returns the type name of self. Read more
Source§

fn type_is<T: 'static>(&self) -> bool

Returns true if Self is of type T. Read more
Source§

fn type_hash(&self) -> u64

Returns a deterministic hash of the TypeId of Self.
Source§

fn type_hash_with<H: Hasher>(&self, hasher: H) -> u64

Returns a deterministic hash of the TypeId of Self using a custom hasher.
Source§

fn as_any_ref(&self) -> &dyn Any
where Self: Sized,

Upcasts &self as &dyn Any. Read more
Source§

fn as_any_mut(&mut self) -> &mut dyn Any
where Self: Sized,

Upcasts &mut self as &mut dyn Any. Read more
Source§

fn as_any_box(self: Box<Self>) -> Box<dyn Any>
where Self: Sized,

Upcasts Box<self> as Box<dyn Any>. Read more
Source§

fn downcast_ref<T: 'static>(&self) -> Option<&T>

Available on crate feature unsafe_layout only.
Returns some shared reference to the inner value if it is of type T. Read more
Source§

fn downcast_mut<T: 'static>(&mut self) -> Option<&mut T>

Available on crate feature unsafe_layout only.
Returns some exclusive reference to the inner value if it is of type T. Read more
Source§

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

Source§

const NEEDS_DROP: bool = _

Know whether dropping values of this type matters, in compile-time.
Source§

fn mem_align_of<T>() -> usize

Returns the minimum alignment of the type in bytes. Read more
Source§

fn mem_align_of_val(&self) -> usize

Returns the alignment of the pointed-to value in bytes. Read more
Source§

fn mem_size_of<T>() -> usize

Returns the size of a type in bytes. Read more
Source§

fn mem_size_of_val(&self) -> usize

Returns the size of the pointed-to value in bytes. Read more
Source§

fn mem_copy(&self) -> Self
where Self: Copy,

Bitwise-copies a value. Read more
Source§

fn mem_needs_drop(&self) -> bool

Returns true if dropping values of this type matters. Read more
Source§

fn mem_drop(self)
where Self: Sized,

Drops self by running its destructor. Read more
Source§

fn mem_forget(self)
where Self: Sized,

Forgets about self without running its destructor. Read more
Source§

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

Replaces self with other, returning the previous value of self. Read more
Source§

fn mem_take(&mut self) -> Self
where Self: Default,

Replaces self with its default value, returning the previous value of self. Read more
Source§

fn mem_swap(&mut self, other: &mut Self)
where Self: Sized,

Swaps the value of self and other without deinitializing either one. Read more
Source§

unsafe fn mem_zeroed<T>() -> T

Available on crate feature unsafe_layout only.
Returns the value of type T represented by the all-zero byte-pattern. Read more
Source§

unsafe fn mem_transmute_copy<Src, Dst>(src: &Src) -> Dst

Available on crate feature unsafe_layout only.
Returns the value of type T represented by the all-zero byte-pattern. Read more
Source§

fn mem_as_bytes(&self) -> &[u8]
where Self: Sync + Unpin,

Available on crate feature unsafe_slice only.
View a Sync + Unpin self as &[u8]. Read more
Source§

fn mem_as_bytes_mut(&mut self) -> &mut [u8]
where Self: Sync + Unpin,

Available on crate feature unsafe_slice only.
View a Sync + Unpin self as &mut [u8]. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

§

impl<S> FromSample<S> for S

§

fn from_sample_(s: S) -> S

Source§

impl<T> Hook for T

Source§

fn hook_ref<F>(self, f: F) -> Self
where F: FnOnce(&Self),

Applies a function which takes the parameter by shared reference, and then returns the (possibly) modified owned value. Read more
Source§

fn hook_mut<F>(self, f: F) -> Self
where F: FnOnce(&mut Self),

Applies a function which takes the parameter by exclusive reference, and then returns the (possibly) modified owned value. Read more
§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided Span, returning an Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an Instrumented wrapper. 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<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> if into_left is true. Converts self into a Right variant of Either<Self, Self> otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> if into_left(&self) returns true. Converts self into a Right variant of Either<Self, Self> otherwise. Read more
§

impl<F, T> IntoSample<T> for F
where T: FromSample<F>,

§

fn into_sample(self) -> T

§

impl<T> Pointable for T

§

const ALIGN: usize

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
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
§

impl<T, U> ToSample<U> for T
where U: FromSample<T>,

§

fn to_sample_(self) -> U

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.
§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a WithDispatch wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a WithDispatch wrapper. Read more
§

impl<S, T> Duplex<S> for T
where T: FromSample<S> + ToSample<S>,

§

impl<T> Ungil for T
where T: Send,