84 lines
1.6 KiB
Rust
84 lines
1.6 KiB
Rust
use std::iter::once;
|
|
|
|
use jaq_interpret::{Error, Native, ParseCtx, Val};
|
|
use tracing::{debug, error, info, trace, warn};
|
|
|
|
use super::macros::*;
|
|
|
|
macro_rules! log_action {
|
|
($level:expr, $val:expr) => {
|
|
match $level.to_ascii_lowercase().as_str() {
|
|
"trace" => trace!("jaq: {}", $val),
|
|
"debug" => debug!("jaq: {}", $val),
|
|
"info" => info!("jaq: {}", $val),
|
|
"warn" => warn!("jaq: {}", $val),
|
|
"error" => error!("jaq: {}", $val),
|
|
_ => return_err!(Err(Error::str("invalid log level"))),
|
|
}
|
|
};
|
|
}
|
|
|
|
pub fn load(jaq: &mut ParseCtx) {
|
|
trace!("jaq: add log filter");
|
|
jaq.insert_native(
|
|
"log".into(),
|
|
1,
|
|
Native::with_update(
|
|
|args, (ctx, val)| {
|
|
let level = match string_arg!(args, 0, ctx, val) {
|
|
Ok(v) => v,
|
|
Err(e) => return_err!(Err(e)),
|
|
};
|
|
|
|
log_action!(level, val);
|
|
|
|
// passthrough
|
|
Box::new(once(Ok(val)))
|
|
},
|
|
|args, (ctx, val), _| {
|
|
let level = match string_arg!(args, 0, ctx, val) {
|
|
Ok(v) => v,
|
|
Err(e) => return_err!(Err(e)),
|
|
};
|
|
|
|
log_action!(level, val);
|
|
|
|
// passthrough
|
|
Box::new(once(Ok(val)))
|
|
},
|
|
),
|
|
);
|
|
|
|
trace!("jaq: add printout filter");
|
|
jaq.insert_native(
|
|
"printout".into(),
|
|
0,
|
|
Native::with_update(
|
|
|_, (_, val)| {
|
|
println!("{}", val);
|
|
Box::new(once(Ok(val)))
|
|
},
|
|
|_, (_, val), _| {
|
|
println!("{}", val);
|
|
Box::new(once(Ok(val)))
|
|
},
|
|
),
|
|
);
|
|
|
|
trace!("jaq: add printerr filter");
|
|
jaq.insert_native(
|
|
"printerr".into(),
|
|
0,
|
|
Native::with_update(
|
|
|_, (_, val)| {
|
|
eprintln!("{}", val);
|
|
Box::new(once(Ok(val)))
|
|
},
|
|
|_, (_, val), _| {
|
|
eprintln!("{}", val);
|
|
Box::new(once(Ok(val)))
|
|
},
|
|
),
|
|
);
|
|
}
|