bash-builtins 0.4.1

This crate provides utilities to implement loadable builtins for bash.
Documentation
//! Bash builtin to print the uppercase equivalent of the arguments.

use bash_builtins::{builtin_metadata, Args, Builtin, Result};
use std::io::{self, BufWriter, Write};

builtin_metadata!(
    name = "upcase",
    create = Upcase::default,
    short_doc = "upcase [args]",
    long_doc = "
        Print the uppercase equivalent of the arguments.
    ",
);

#[derive(Default)]
struct Upcase;

impl Builtin for Upcase {
    fn call(&mut self, args: &mut Args) -> Result<()> {
        args.no_options()?;

        let stdout_handle = io::stdout();
        let mut output = BufWriter::new(stdout_handle.lock());

        for (index, argument) in args.string_arguments().enumerate() {
            let sep = if index > 0 { " " } else { "" };
            write!(&mut output, "{}{}", sep, argument?.to_uppercase())?;
        }

        output.write_all(b"\n")?;

        Ok(())
    }
}