Browse Source

feat: return option inside the preprocess result

main
fdai7451 2 years ago
parent
commit
152c638d76
  1. 6
      src/execute.rs
  2. 9
      src/preprocess.rs

6
src/execute.rs

@ -13,7 +13,11 @@ pub fn interpret(
config: &mut BuiltinConfig,
ctrlc_recv: Receiver<()>,
) -> Result<(), ShellError> {
line = preprocess(line)?;
if let Some(l) = preprocess(line)? {
line = l
} else {
return Ok(());
}
if line.is_empty() {
return Err(ShellError::EmptyLine);

9
src/preprocess.rs

@ -5,7 +5,9 @@ use std::env;
const ENV_SET: Lazy<Regex> = Lazy::new(|| Regex::new(r#"(?P<key>\w+)=(?P<value>\w*)"#).unwrap());
pub fn preprocess(line: String) -> Result<String, ShellError> {
/// Returns `Ok(Some(...))` if a command should be triggered after calling this functions. If it
/// returns `Ok(None)`, do not execute a command.
pub fn preprocess(line: String) -> Result<Option<String>, ShellError> {
if let Some(capture) = ENV_SET.captures(&line) {
let Some(key) = capture.name("key") else {
return Err(ShellError::MalformedArgs("cannot find key to set env variable".to_string()))
@ -14,8 +16,9 @@ pub fn preprocess(line: String) -> Result<String, ShellError> {
.name("value")
.map_or("".to_string(), |v| v.as_str().to_string());
env::set_var(key.as_str(), value)
env::set_var(key.as_str(), value);
return Ok(None);
}
Ok(line)
Ok(Some(line))
}
Loading…
Cancel
Save