From 2355137d412f48379d3fc81d6b727a786e0b765d Mon Sep 17 00:00:00 2001 From: Ren Kararou Date: Sat, 13 Jul 2024 00:05:42 -0500 Subject: add common lib, custom macros, courtesy of Skylar Bleed --- usr/src/lib/com/Cargo.toml | 12 +++++++++ usr/src/lib/com/src/lib.rs | 62 ++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 74 insertions(+) create mode 100644 usr/src/lib/com/Cargo.toml create mode 100644 usr/src/lib/com/src/lib.rs (limited to 'usr/src/lib') diff --git a/usr/src/lib/com/Cargo.toml b/usr/src/lib/com/Cargo.toml new file mode 100644 index 0000000..47b334d --- /dev/null +++ b/usr/src/lib/com/Cargo.toml @@ -0,0 +1,12 @@ +[package] +name = "com" +version.workspace = true +edition.workspace = true +license.workspace = true +authors.workspace = true +description.workspace = true +documentation.workspace = true +repository.workspace = true +readme.workspace = true + +[dependencies] diff --git a/usr/src/lib/com/src/lib.rs b/usr/src/lib/com/src/lib.rs new file mode 100644 index 0000000..b0097c9 --- /dev/null +++ b/usr/src/lib/com/src/lib.rs @@ -0,0 +1,62 @@ +/* + * CDDL HEADER START + * + * The contents of this file are subject to the terms of the + * Common Development and Distribution License, Version 1.0 only + * (the "License"). You may not use this file except in compliance + * with the License. + * + * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE + * or http://www.opensolaris.org/os/licensing. + * See the License for the specific language governing permissions + * and limitations under the License. + * + * When distributing Covered Code, include this CDDL HEADER in each + * file and include the License file at usr/src/OPENSOLARIS.LICENSE. + * If applicable, add the following below this CDDL HEADER, with the + * fields enclosed by brackets "[]" replaced with your own identifying + * information: Portions Copyright [yyyy] [name of copyright owner] + * + * CDDL HEADER END + */ + +/* + * Copyright 2023 Skylar Alexandra Bleed. All rights reserved. + * Use is subject to license terms. + */ + +/** like a prelude: use com::macros::*; */ +pub mod macros { + pub use crate::{ok_or, some_or, fatal}; +} + +/** print an error and abort */ +#[macro_export] +macro_rules! fatal { + ($($t:tt)*) => {{ + eprintln!("fatal error: {}", format!($($t)*)); + std::process::exit(-1); + }}; +} + +/** expect an Ok value or abort */ +#[macro_export] +macro_rules! ok_or { + ($x:expr, $($t:tt)*) => {{ + match $x { + Ok(x) => x, + Err(e) => fatal!("{e}: {}", format!($($t)*)), + } + }}; +} + +/** expect a Some value or abort */ +#[macro_export] +macro_rules! some_or { + ($x:expr, $($t:tt)*) => {{ + match $x { + Some(x) => x, + None => fatal!($($t)*), + } + }}; +} -- cgit 1.4.1-2-gfad0