mirror of
https://git.sr.ht/~spicywolf/k2spice
synced 2025-01-18 01:39:39 +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/false",
|
||||
"usr/src/mei/hostname",
|
||||
"usr/src/lib/com",
|
||||
]
|
||||
default-members = [
|
||||
"usr/src/mei/true",
|
||||
|
@ -33,4 +34,3 @@ readme = "README.md"
|
|||
nix = "0.27"
|
||||
clap = { version = "4.4.8", 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;
|
||||
}
|
||||
} else {
|
||||
formatted += &fmtstr[i..i+1];
|
||||
formatted += &fmtstr[i..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
|
||||
|
||||
[dependencies]
|
||||
com = { path = "../../lib/com" }
|
||||
|
|
|
@ -22,18 +22,20 @@
|
|||
|
||||
/*
|
||||
* Copyright 2023 Ren Kararou All rights reserved.
|
||||
* Portions copyright Skylar Alexandra Bleed 2024. All rights reserved.
|
||||
* Use is subject to license terms.
|
||||
*/
|
||||
|
||||
use std::env::current_dir;
|
||||
use std::process::exit;
|
||||
use com::macros::*;
|
||||
|
||||
fn main() {
|
||||
if let Ok(buf) = current_dir() {
|
||||
println!("{}", buf.to_str().expect("pwd: cannot determine current directoy!"));
|
||||
exit(0);
|
||||
} else {
|
||||
eprintln!("pwd: cannot determine current directory!");
|
||||
exit(2);
|
||||
}
|
||||
/* TODO: make expect accept different error codes? */
|
||||
|
||||
/* buf */
|
||||
let b = ok_or!(current_dir(), "pwd: cannot determine current directory!");
|
||||
/* path */
|
||||
let p = some_or!(b.to_str(), "pwd: cannot get path from buf!");
|
||||
|
||||
println!("{p}");
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue