mirror of
https://github.com/ibm-s390-linux/s390-tools.git
synced 2026-08-05 02:14:52 +00:00
Add a thin wrapper around [u8] to be able to represent an u8-slice as a hex-string for Display and Serialize. Acked-by: Qi Feng Huo <huoqif@cn.ibm.com> Reviewed-by: Marc Hartmayer <mhartmay@linux.ibm.com> Signed-off-by: Steffen Eiden <seiden@linux.ibm.com>
102 lines
2.9 KiB
Rust
102 lines
2.9 KiB
Rust
// SPDX-License-Identifier: MIT
|
|
//! Utils for s390-tools written in rust.
|
|
//! Not intened to be used outside of s390-tools.
|
|
//!
|
|
//! Copyright IBM Corp. 2023, 2024
|
|
mod cli;
|
|
mod hexslice;
|
|
mod log;
|
|
mod tmpfile;
|
|
|
|
pub use crate::cli::CertificateOptions;
|
|
pub use crate::cli::{get_reader_from_cli_file_arg, get_writer_from_cli_file_arg};
|
|
pub use crate::cli::{print_cli_error, print_error};
|
|
pub use crate::cli::{STDIN, STDOUT};
|
|
pub use crate::hexslice::HexSlice;
|
|
pub use crate::log::PvLogger;
|
|
pub use crate::tmpfile::TemporaryDirectory;
|
|
|
|
/// Get the s390-tools release string
|
|
///
|
|
/// Provides the s390-tools release string.
|
|
/// For release builds this reqquires the environment variable
|
|
/// `S390_TOOLS_RELEASE` to be present at compile time.
|
|
/// For debug builds this value defaults to `DEBUG_BUILD`
|
|
/// if that variable is not present.
|
|
/// Should only be used by binary targets!!
|
|
///
|
|
/// Collapses to a compile time constant, that is likely to be inlined
|
|
/// by the compiler in release builds.
|
|
#[macro_export]
|
|
macro_rules! release_string {
|
|
() => {{
|
|
#[cfg(debug_assertions)]
|
|
match option_env!("S390_TOOLS_RELEASE") {
|
|
Some(ver) => ver,
|
|
None => "DEBUG BUILD",
|
|
}
|
|
#[cfg(not(debug_assertions))]
|
|
env!("S390_TOOLS_RELEASE", "env 'S390_TOOLS_RELEASE' must be set for release builds. Trigger build using the s390-tools build system or export the variable yourself")
|
|
}};
|
|
}
|
|
|
|
#[macro_export]
|
|
/// Print the version to stdout
|
|
///
|
|
/// verbosity: integer if >0 more and more details printed
|
|
/// feat: (optional) list of features
|
|
/// rel_str: a string containig the release name
|
|
macro_rules! print_version {
|
|
($verbosity: expr, $year: expr $( ,$feat: expr)?) => {{
|
|
println!(
|
|
"{} version {}\nCopyright IBM Corp. {}",
|
|
env!("CARGO_PKG_NAME"),
|
|
$crate::release_string!(),
|
|
$year,
|
|
);
|
|
if $verbosity > 0 {
|
|
$($feat.iter().for_each(|f| print!("{f} ")); println!("(compiled)");)?
|
|
}
|
|
if $verbosity > 1 {
|
|
println!(
|
|
"\n{}-crate {}",
|
|
env!("CARGO_PKG_NAME"),
|
|
env!("CARGO_PKG_VERSION"),
|
|
);
|
|
}
|
|
}};
|
|
}
|
|
|
|
/// Asserts a constant expression evaluates to `true`.
|
|
///
|
|
/// If the expression is not evaluated to `true` the compilation will fail.
|
|
#[macro_export]
|
|
macro_rules! static_assert {
|
|
($condition:expr) => {
|
|
const _: () = core::assert!($condition);
|
|
};
|
|
}
|
|
|
|
/// Asserts that a type has a specific size.
|
|
///
|
|
/// Useful to validate structs that are passed to C code.
|
|
/// If the size has not the expected value the compilation will fail.
|
|
///
|
|
/// # Example
|
|
/// ```rust
|
|
/// # use utils::assert_size;
|
|
/// # fn main() {}
|
|
/// #[repr(C)]
|
|
/// struct c_struct {
|
|
/// v: u64,
|
|
/// }
|
|
/// assert_size!(c_struct, 8);
|
|
/// // assert_size!(c_struct, 7);//won't compile
|
|
/// ```
|
|
#[macro_export]
|
|
macro_rules! assert_size {
|
|
($t:ty, $sz:expr ) => {
|
|
$crate::static_assert!(::std::mem::size_of::<$t>() == $sz);
|
|
};
|
|
}
|