use std::fmt::Display;
use crate::geometry::{Orientation, Vector};
use image::Rgb;
#[derive(Debug, Clone)]
pub struct Word {
pub pos: Vector,
pub text: String,
pub orientation: Orientation,
pub color: Rgb<u8>,
pub font_name: String,
pub size: u32,
pub count: u32,
}
impl Display for Word {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
write!(f, "Word[{}]", self.text)
}
}
impl Word {
pub fn new(
text: &str,
orientation: Orientation,
color: Rgb<u8>,
font_name: &str,
size: u32,
) -> Word {
Word {
text: text.to_string(),
orientation,
color,
font_name: font_name.to_string(),
size,
count: 1,
pos: (0, 0),
}
}
pub fn displace(&self, pos: Vector) -> Word {
let mut word = self.clone();
word.pos = pos;
word
}
}
#[cfg(test)]
mod test {
use super::*;
#[test]
fn word_construction() {
let red = Rgb([255, 0, 0]);
let word = Word::new("Hello", Orientation::Horizontal, red, "dejavu", 12);
assert_eq!("Hello", word.text);
assert_eq!(Orientation::Horizontal, word.orientation);
assert_eq!(red, word.color);
assert_eq!("dejavu", word.font_name);
assert_eq!(12, word.size);
}
}