1
0
Fork 0
mirror of https://git.sr.ht/~spicywolf/k2spice synced 2025-01-18 17:59:39 +00:00

add common lib, custom macros, courtesy of Skylar Bleed

This commit is contained in:
Ren Kararou 2024-07-13 00:05:42 -05:00
parent 80b2dd3153
commit 2355137d41
Signed by: spicywolf
GPG key ID: B0BA4EEC0714F8E6
6 changed files with 87 additions and 10 deletions

View file

@ -8,6 +8,7 @@ members = [
"usr/src/mei/printf", "usr/src/mei/printf",
"usr/src/mei/false", "usr/src/mei/false",
"usr/src/mei/hostname", "usr/src/mei/hostname",
"usr/src/lib/com",
] ]
default-members = [ default-members = [
"usr/src/mei/true", "usr/src/mei/true",
@ -33,4 +34,3 @@ readme = "README.md"
nix = "0.27" nix = "0.27"
clap = { version = "4.4.8", features = ["derive"] } clap = { version = "4.4.8", features = ["derive"] }
serde = { version = "1.0.192", features = ["derive"] } serde = { version = "1.0.192", features = ["derive"] }

View file

@ -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]

View file

@ -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)*),
}
}};
}

View file

@ -123,7 +123,7 @@ fn fmt(fmtstr: String, args: Vec<String>) -> String {
i = xe; i = xe;
} }
} else { } else {
formatted += &fmtstr[i..i+1]; formatted += &fmtstr[i..i + 1];
} }
i += 1; i += 1;
} }

View file

@ -16,3 +16,4 @@ path = "src/pwd.rs"
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html # See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
[dependencies] [dependencies]
com = { path = "../../lib/com" }

View file

@ -22,18 +22,20 @@
/* /*
* Copyright 2023 Ren Kararou All rights reserved. * Copyright 2023 Ren Kararou All rights reserved.
* Portions copyright Skylar Alexandra Bleed 2024. All rights reserved.
* Use is subject to license terms. * Use is subject to license terms.
*/ */
use std::env::current_dir; use std::env::current_dir;
use std::process::exit; use com::macros::*;
fn main() { fn main() {
if let Ok(buf) = current_dir() { /* TODO: make expect accept different error codes? */
println!("{}", buf.to_str().expect("pwd: cannot determine current directoy!"));
exit(0); /* buf */
} else { let b = ok_or!(current_dir(), "pwd: cannot determine current directory!");
eprintln!("pwd: cannot determine current directory!"); /* path */
exit(2); let p = some_or!(b.to_str(), "pwd: cannot get path from buf!");
}
println!("{p}");
} }