#[derive(Debug, Clone)]
pub struct Answer<'a> {
types: Vec<&'a str>,
ambiguous: bool,
}
impl Answer<'static> {
pub(crate) fn unknown() -> Answer<'static> {
Self::new(vec![], false)
}
}
impl<'a> Answer<'a> {
pub(crate) fn new(types: Vec<&'a str>, ambiguous: bool) -> Answer<'a> {
Answer { types, ambiguous }
}
pub(crate) fn definite(name: &'a str) -> Answer<'a> {
Answer {
types: vec![name],
ambiguous: false,
}
}
pub fn is_definite(&self) -> bool {
self.types.len() >= 1 && !self.ambiguous
}
pub fn is_unknown(&self) -> bool {
self.types.len() == 0
}
pub fn is_ambiguous(&self) -> bool {
self.ambiguous
}
pub fn best(&self) -> Option<&'a str> {
if self.ambiguous || self.types.is_empty() {
None
} else {
Some(self.types[0])
}
}
pub fn all_types(&self) -> &'_ [&'a str] {
&self.types
}
}