fix: Better enforce typing for commands

This commit is contained in:
2025-01-30 22:02:07 -05:00
parent c58cbff4b2
commit 2d7d6cf641

View File

@@ -6,7 +6,7 @@ use syn::{
Error, Token, Error, Token,
}; };
use crate::{cmd::Value, macros::enum_to_tokens}; use crate::cmd::Value;
pub struct Pipe { pub struct Pipe {
stdin: Option<Value>, stdin: Option<Value>,
@@ -47,7 +47,7 @@ impl ToTokens for Pipe {
let first_command = commands_iter.next().unwrap(); let first_command = commands_iter.next().unwrap();
let initial = quote! { let initial = quote! {
let mut _c_0 = #first_command; let mut _c_0: #first_command;
_c_0.stdout(::std::process::Stdio::piped()); _c_0.stdout(::std::process::Stdio::piped());
_c_0.stdin(::std::process::Stdio::piped()); _c_0.stdin(::std::process::Stdio::piped());
let mut _child_0 = _c_0.spawn()?; let mut _child_0 = _c_0.spawn()?;
@@ -95,7 +95,7 @@ impl ToTokens for Pipe {
}); });
} }
let mut #com_ident = #command; let mut #com_ident: #command;
#com_ident.stdout(::std::process::Stdio::piped()); #com_ident.stdout(::std::process::Stdio::piped());
#com_ident.stdin(::std::process::Stdio::piped()); #com_ident.stdin(::std::process::Stdio::piped());
@@ -171,4 +171,21 @@ impl Parse for CommandExpr {
} }
} }
enum_to_tokens! {CommandExpr: Macro, Reference, Function, Block} impl ToTokens for CommandExpr {
fn to_tokens(&self, tokens: &mut proc_macro2::TokenStream) {
tokens.extend(match self {
Self::Macro(macr) => quote! {
::std::process::Command = #macr
},
Self::Reference(refer) => quote! {
&mut ::std::process::Command = #refer
},
Self::Function(fun) => quote! {
::std::process::Command = #fun
},
Self::Block(block) => quote! {
::std::process::Command = #block
},
});
}
}