use crate::tokenizers::models::Token;
use std::collections::{HashMap, HashSet};
#[derive(Debug, Ord, PartialOrd, Eq, PartialEq, Hash, Clone)]
pub enum CitationMetadata<'a> {
Parenthetical(&'a str),
PinCite(&'a str),
Year(&'a str),
Court(&'a str),
Plaintiff(&'a str),
Defendant(&'a str),
Extra(&'a str),
AntecedentGuess(&'a str),
Volume(&'a str),
}
pub struct CitationSource<'a> {
pub token: Token<'a>,
pub index: usize,
pub span_start: Option<usize>,
pub span_end: Option<usize>,
pub groups: HashMap<String, String>,
pub metadata: HashSet<CitationMetadata<'a>>,
}
pub enum Citation<'a> {
Resource {
source: CitationSource<'a>,
pin_cite: Option<&'a str>,
year: Option<&'a str>,
},
Law {
source: CitationSource<'a>,
publisher: Option<&'a str>,
day: Option<&'a str>,
month: Option<&'a str>,
},
Journal {
source: CitationSource<'a>,
},
Case {
source: CitationSource<'a>,
pin_cite: Option<&'a str>,
year: Option<&'a str>,
court: Option<&'a str>,
},
FullCase {
source: CitationSource<'a>,
pin_cite: Option<&'a str>,
year: Option<&'a str>,
court: Option<&'a str>,
plaintiff: Option<&'a str>,
defendant: Option<&'a str>,
extra: Option<&'a str>,
},
ShortCase {
source: CitationSource<'a>,
pin_cite: Option<&'a str>,
year: Option<&'a str>,
court: Option<&'a str>,
antecedent_guess: Option<&'a str>,
},
Supra {
source: CitationSource<'a>,
pin_cite: Option<&'a str>,
year: Option<&'a str>,
court: Option<&'a str>,
antecedent_guess: Option<&'a str>,
volume: Option<&'a str>,
},
Id {
source: CitationSource<'a>,
pin_cite: Option<&'a str>,
year: Option<&'a str>,
court: Option<&'a str>,
antecedent_guess: Option<&'a str>,
volume: Option<&'a str>,
},
Unknown {
source: CitationSource<'a>,
},
}