about summary refs log tree commit diff stats
path: root/usr/src/lib
diff options
context:
space:
mode:
Diffstat (limited to 'usr/src/lib')
-rw-r--r--usr/src/lib/com/Cargo.toml12
-rw-r--r--usr/src/lib/com/src/lib.rs62
2 files changed, 74 insertions, 0 deletions
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)*),
+        }
+    }};
+}