moved TallyID into it's own file

Tally id now ignores tha case since it's basicly a hex value as a
string. Reason for that is that if a user inputs an id.
This commit is contained in:
Djeeberjr 2025-05-12 21:35:20 +02:00
parent b6b66a7e5b
commit 47f19f3c54
3 changed files with 50 additions and 12 deletions

View File

@ -2,19 +2,10 @@ use serde::{Deserialize, Serialize};
use std::{
collections::{HashMap, HashSet},
error::Error,
fmt::Display,
};
use tokio::fs;
/// Represents the ID that is stored on the Tally
#[derive(PartialEq, Eq, Deserialize, Serialize, Hash, Clone, PartialOrd, Ord)]
pub struct TallyID(pub String);
impl Display for TallyID {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
write!(f, "{}", self.0)
}
}
use crate::tally_id::TallyID;
/// Represents a single day that IDs can attend
#[derive(Deserialize, Serialize)]

View File

@ -1,11 +1,12 @@
use buzzer::GPIOBuzzer;
use id_store::{IDStore, TallyID};
use id_store::IDStore;
use led::Led;
use log::{LevelFilter, debug, error, info, warn};
use pm3::run_pm3;
use rppal::pwm::Channel;
use simplelog::{ConfigBuilder, SimpleLogger};
use std::{env, error::Error, sync::Arc};
use tally_id::TallyID;
use tokio::{
fs,
sync::{Mutex, mpsc},
@ -19,6 +20,7 @@ mod id_store;
mod led;
mod parser;
mod pm3;
mod tally_id;
mod webserver;
const STORE_PATH: &str = "./data.json";
@ -92,7 +94,7 @@ async fn main() -> Result<(), Box<dyn Error>> {
let channel_store = store.clone();
tokio::spawn(async move {
while let Some(tally_id_string) = rx.recv().await {
let tally_id = id_store::TallyID(tally_id_string);
let tally_id = TallyID(tally_id_string);
if hotspot_ids.contains(&tally_id) {
info!("Enableing hotspot");

45
src/tally_id.rs Normal file
View File

@ -0,0 +1,45 @@
use std::{
cmp::Ordering,
fmt::Display,
hash::{Hash, Hasher},
};
use serde::{Deserialize, Serialize};
/// Represents the ID that is stored on the Tally
/// Is case-insensitive.
/// While any string can be a ID, most IDs are going to be a hex string.
#[derive(Deserialize, Serialize, Clone)]
pub struct TallyID(pub String);
impl PartialEq for TallyID {
fn eq(&self, other: &Self) -> bool {
self.0.eq_ignore_ascii_case(&other.0)
}
}
impl Hash for TallyID {
fn hash<H: Hasher>(&self, state: &mut H) {
self.0.to_uppercase().hash(state);
}
}
impl Eq for TallyID {}
impl Ord for TallyID {
fn cmp(&self, other: &Self) -> Ordering {
self.0.to_uppercase().cmp(&other.0.to_uppercase())
}
}
impl PartialOrd for TallyID {
fn partial_cmp(&self, other: &Self) -> Option<Ordering> {
Some(self.cmp(other))
}
}
impl Display for TallyID {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
write!(f, "{}", self.0.to_uppercase())
}
}