printf-wrap
printf-wrap is a Rust crate with types to help developers write safe wrappers for
C functions using printf(3)-style format strings and varargs.
In particular, PrintfFmt<(T_1, T_2, ..., T_N)> is a wrapper around a null-terminated string
that is guaranteed to be a valid format string for use with N ≤ 32 arguments of types
T_1, T_2, …, T_N
when the arguments are mapped through the PrintfArgument::as_c_val() method.
The following example shows a safe wrapper for calling printf with two arguments,
along with a use of it.
use ;
use ;
/// Safe wrapper for calling printf with two value arguments.
const MY_FORMAT_STRING: =
new_or_panic;
In the example, MY_FORMAT_STRING is determined to be a valid format string
for arguments of (u32, i32) at compile time, with zero runtime overhead.
With a little macro magic, generating wrappers for different numbers of post-format
arguments is easy, with printf-wrap handling the validation and conversion of
values to C-compatible equivalents.
Features
libc – enables support relating to the C types
size_t, intmax_t, and ptrdiff_t; requires the libc crate.
example – enables a demonstration of the use of printf-wrap
with some wrappers around functions from the C standard library; also
requires the libc crate.
License
This crate is licensed under either of the MIT license or the Apache License version 2.0 at your option.