use crate::geometry::Location;
use crate::symbol::Symbol;
use crate::symbology::Symbology;
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]
pub struct Fingerprint(pub u64);
#[derive(Debug, Clone)]
pub struct Candidate {
pub location: Location,
pub symbology: Option<Symbology>,
pub fingerprint: Option<Fingerprint>,
pub known: Option<Symbol>,
}
impl Candidate {
pub fn at(location: Location) -> Self {
Candidate {
location,
symbology: None,
fingerprint: None,
known: None,
}
}
}
#[derive(Debug, Clone, Default)]
pub struct Hints {
pub previous: Vec<KnownSymbol>,
}
#[derive(Debug, Clone)]
pub struct KnownSymbol {
pub symbol: Symbol,
pub fingerprint: Option<Fingerprint>,
}
impl Hints {
pub fn new() -> Self {
Hints::default()
}
pub fn find(&self, fp: Fingerprint) -> Option<&KnownSymbol> {
self.previous.iter().find(|k| k.fingerprint == Some(fp))
}
}