Types énumérés et structures
Les types énumérés et les structures (~30 minutes).
code final:
pub struct Texte {
texte: String,
style: Option<Style>,
couleur: Option<Couleur>,
}
impl Texte {
fn new(texte: String) -> Self {
Texte {
texte,
style: None,
couleur: None,
}
}
fn change_couleur(&mut self, c: Couleur) {
self.couleur = Some(c)
}
fn change_style(&mut self, s: Style) {
self.style = Some(s)
}
fn affiche(&self) {
let code_couleur = if let Some(c) = &self.couleur {
c.code()
} else {
0
};
let code_style = self.style.as_ref().map(|s| s.code()).unwrap_or(0);
println!(
"\u{001b}[{};{}m{}\u{001b}[0m",
code_couleur, code_style, self.texte
);
}
}
#[derive(Debug)]
enum Style {
Clignote,
Gras,
Souligne,
}
impl Style {
fn code(&self) -> u8 {
match *self {
Style::Gras => 1,
Style::Souligne => 4,
Style::Clignote => 5,
}
}
fn affiche(&self, texte: &str) {
println!("\u{001b}[;{}m{}\u{001b}[0m", self.code(), texte);
}
}
enum Couleur {
Rouge,
Vert,
Bleu,
Maison(u8),
}
impl Couleur {
fn code(&self) -> u8 {
match *self {
Couleur::Rouge => 31,
Couleur::Vert => 32,
Couleur::Bleu => 34,
Couleur::Maison(c) => c,
}
}
fn affiche(&self, texte: &str) {
println!("\u{001b}[{}m{}\u{001b}[0m", self.code(), texte);
}
}
fn main() {
let mut t = Texte::new("coucou".to_owned());
t.change_couleur(Couleur::Rouge);
t.change_style(Style::Clignote);
t.affiche();
}