mirror of
https://git.sr.ht/~spicywolf/k2spice
synced 2025-01-18 09:49:38 +00:00
add common lib, custom macros, courtesy of Skylar Bleed
This commit is contained in:
parent
80b2dd3153
commit
2355137d41
|
@ -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"] }
|
||||||
|
|
||||||
|
|
12
usr/src/lib/com/Cargo.toml
Normal file
12
usr/src/lib/com/Cargo.toml
Normal 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]
|
62
usr/src/lib/com/src/lib.rs
Normal file
62
usr/src/lib/com/src/lib.rs
Normal 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)*),
|
||||||
|
}
|
||||||
|
}};
|
||||||
|
}
|
|
@ -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;
|
||||||
}
|
}
|
||||||
|
|
|
@ -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" }
|
||||||
|
|
|
@ -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}");
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue