lcowsay 0.5.14

Cowsay, but combined with lolcat.
Documentation
use std::fmt;

#[derive(Debug)]
#[cfg_attr(feature = "clap", derive(clap::ValueEnum, Clone))]
pub enum CowShape {
    Clippy,
    Cow,
    Moose,
    Ferris,
}

const COW: &str = r"
        \   ^__^
         \  (oo)\_______
            (__)\       )\/\
                ||----w |
                ||     ||";

const CLIPPY: &str = r"
         \
          \
             __
            /  \
            |  |
            @  @
            |  |
            || |/
            || ||
            |\_/|
            \___/";

const FERRIS: &str = r"
        \
         \
            _~^~^~_
        \) /  o o  \ (/
          '_   -   _'
          / '-----' \";

const MOOSE: &str = r"
  \
   \   \_\_    _/_/
    \      \__/
           (oo)\_______
           (__)\       )\/\
               ||----w |
               ||     ||";

impl fmt::Display for CowShape {
    fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
        let display = match self {
            Self::Cow => COW,
            Self::Clippy => CLIPPY,
            Self::Ferris => FERRIS,
            Self::Moose => MOOSE,
        };
        f.write_str(display)
    }
}