Unfortunately things are complex.
Safe rust, easy to use, minimal dependencies, complete test suite
Respect the CLICOLOR/CLICOLOR_FORCE behavior (see the specs)
Respect the NO_COLOR behavior (see the specs)
Do note that CLICOLOR_FORCE overrules NO_COLOR, which overrules CLICOLOR
Works on Linux, MacOS, and Windows (Powershell)
It has to support 3 different OSes and 4 different flags. I'd think that that combined with supporting foreground, background, and style merits it's own struct. Plus it kind of does, since there are also the methods to and froming String, andimpl<'a> Colorize for &'a str. In general, the more general a thing is, the more complex it has to be.