Sou novo no Rust e não conheço bem esses iterators, mas vou ficar ligado agora.
Em Rust não sei como eles funcionam, mas já sofri muito com eles em C++, acredito que seja semelhante.
Não entendi bem como eu usaria o next() infinitamente
o next() sempre retorna o próximo elemento. um pseudocódigo ficaria assim:
fn main() {
let mut args: Args = env::args();
args.next(); // para remover o primeiro elemento
let mut arg: String = args.next();
let is_help_needed = arg == null || arg == "-h" || arg == "--help"
if is_help_needed {
println!("Example: eco-rs Bom dia!");
exit(0);
}
do {
output.push_str(&format!("{arg} "));
while(arg = args.next())
println!("{}", output.trim());
}
PS: não entendo de rust, o código pode estar incorreto, mas a intenção é essa.
PS2: não sei se no rust essa solução teria um ganho de desempenho, teria que fazer um teste de benchmarking. Estou questionando para você verificar isso.
Sobre a segunda evolução: pelo que pesquisei, o programa echo não lê o stdin e por isso não tem como passar arquivos para ele
A minha sugestão seria algo como:
if (args.len == 1 && fileExists(args[0])){
printFile(args)
} else {
printArgs(args)
}