Files
canvas-boardgame/canvas/src/card.rs
Lukas Wölfer a52acc6daf
All checks were successful
Rust / build_and_test (push) Successful in 23s
Removed warnings
2025-07-27 18:20:18 +02:00

64 lines
2.0 KiB
Rust

use crate::{CardField, Icon};
#[derive(Debug, Default)]
// There are 60 cards in the base set
pub struct Card {
pub field: [CardField; 5],
}
impl Card {
pub const fn empty() -> Self {
Self {
field: [CardField::Empty; 5],
}
}
pub fn from_dbg_string(text: &str) -> Self {
let mut result = Self::empty();
let mut current_field = 0;
let mut char_iter = text.chars();
let match_icon = |x: char| {
let field = match x {
's' => Icon::Square,
'c' => Icon::Circle,
't' => Icon::Triangle,
'l' => Icon::Color,
_ => return None,
};
Some(field)
};
while let Some(c) = char_iter.next() {
if let Some(f) = match_icon(c) {
result.field[current_field] = CardField::Icon(f);
current_field += 1;
continue;
}
let field = match c {
'p' => {
let f = match_icon(char_iter.next().expect("No icon after point symbol"))
.expect("Incorrect icon after point symbol");
CardField::PointsPer(f)
}
'd' => {
let f1 =
match_icon(char_iter.next().expect("No first icon after double symbol"))
.expect("Incorrect first icon after double symbol");
let f2 = match_icon(
char_iter
.next()
.expect("No second icon after double symbol"),
)
.expect("Incorrect second icon after double symbol");
CardField::DoubleIcon((f1, f2))
}
'.' => CardField::Empty,
'-' => continue,
_ => panic!("Unknown character {c}"),
};
result.field[current_field] = field;
current_field += 1;
}
result
}
}