#[non_exhaustive]pub enum Specifier<'a> {
Percent,
Int(SignedInt),
Uint(UnsignedInt),
Octal(UnsignedInt),
Double {
value: f64,
format: DoubleFormat,
},
Bytes(&'a [u8]),
String(&'a CStr),
Char(u8),
Hex(UnsignedInt),
UpperHex(UnsignedInt),
Pointer(*const ()),
WriteBytesWritten(c_int, *const c_int),
}
Expand description
Variants (Non-exhaustive)§
This enum is marked as non-exhaustive
Non-exhaustive enums could have additional variants added in future. Therefore, when matching against variants of non-exhaustive enums, an extra wildcard arm must be added to account for any future variants.
Percent
%
Int(SignedInt)
d
, i
Uint(UnsignedInt)
u
Octal(UnsignedInt)
o
Double
f
, F
, e
, E
, g
, G
, a
, A
Bytes(&'a [u8])
string outside of formatting
String(&'a CStr)
s
The same as Bytes
but guaranteed to be
null-terminated. This can be used for optimizations, where if you
need to null terminate a string to print it, you can skip that step.
Char(u8)
c
Hex(UnsignedInt)
x
UpperHex(UnsignedInt)
X
Pointer(*const ())
p
WriteBytesWritten(c_int, *const c_int)
n
§Safety
This can be a serious security vulnerability if the format specifier
of printf
is allowed to be user-specified. This shouldn’t ever
happen, but poorly-written software may do so.
Trait Implementations§
impl<'a> Copy for Specifier<'a>
impl<'a> StructuralPartialEq for Specifier<'a>
Auto Trait Implementations§
impl<'a> Freeze for Specifier<'a>
impl<'a> RefUnwindSafe for Specifier<'a>
impl<'a> !Send for Specifier<'a>
impl<'a> !Sync for Specifier<'a>
impl<'a> Unpin for Specifier<'a>
impl<'a> UnwindSafe for Specifier<'a>
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
Mutably borrows from an owned value. Read more
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self>
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 moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
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