use std::borrow::Cow;
use std::fmt;
enum Color {
Red,
Green,
Blue,
Rgb { r: u8, g: u8, b: u8 },
}
impl Color {
fn to_str(&self) -> Cow<str> {
use Color::*;
match *self {
Red => "#FF0000".into(),
Green => "#00FF00".into(),
Blue => "#0000FF".into(),
Rgb { r, g, b } => format!("#{:02X}{:02X}{:02X}", r, g, b).into(),
}
}
}
impl fmt::Display for Color {
fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
f.write_str(&self.to_str())
}
}
fn main() {
let color = Color::Rgb {
r: 255,
g: 255,
b: 255,
};
println!("{}", color);
}
dXNlIHN0ZDo6Ym9ycm93OjpDb3c7CnVzZSBzdGQ6OmZtdDsKCmVudW0gQ29sb3IgewogICAgUmVkLAogICAgR3JlZW4sCiAgICBCbHVlLAogICAgUmdiIHsgcjogdTgsIGc6IHU4LCBiOiB1OCB9LAp9CgppbXBsIENvbG9yIHsKICAgIGZuIHRvX3N0cigmc2VsZikgLT4gQ293PHN0cj4gewogICAgICAgIHVzZSBDb2xvcjo6KjsKICAgICAgICBtYXRjaCAqc2VsZiB7CiAgICAgICAgICAgIFJlZCA9PiAiI0ZGMDAwMCIuaW50bygpLAogICAgICAgICAgICBHcmVlbiA9PiAiIzAwRkYwMCIuaW50bygpLAogICAgICAgICAgICBCbHVlID0+ICIjMDAwMEZGIi5pbnRvKCksCiAgICAgICAgICAgIFJnYiB7IHIsIGcsIGIgfSA9PiBmb3JtYXQhKCIjezowMlh9ezowMlh9ezowMlh9IiwgciwgZywgYikuaW50bygpLAogICAgICAgIH0KICAgIH0KfQoKaW1wbCBmbXQ6OkRpc3BsYXkgZm9yIENvbG9yIHsKICAgIGZuIGZtdCgmc2VsZiwgZjogJm11dCBmbXQ6OkZvcm1hdHRlcikgLT4gZm10OjpSZXN1bHQgewogICAgICAgIGYud3JpdGVfc3RyKCZzZWxmLnRvX3N0cigpKQogICAgfQp9CgpmbiBtYWluKCkgewogICAgbGV0IGNvbG9yID0gQ29sb3I6OlJnYiB7CiAgICAgICAgcjogMjU1LAogICAgICAgIGc6IDI1NSwKICAgICAgICBiOiAyNTUsCiAgICB9OwogICAgcHJpbnRsbiEoInt9IiwgY29sb3IpOwp9Cg==