feat: add playlist date parser
This commit is contained in:
parent
d18f175aef
commit
a992495b2b
8 changed files with 1909 additions and 422 deletions
|
|
@ -27,20 +27,22 @@ fn parse_tu(tu: &str) -> (u8, Option<TimeUnit>) {
|
|||
}
|
||||
}
|
||||
|
||||
// #[test]
|
||||
#[test]
|
||||
fn generate_dictionary() {
|
||||
let dict = super::read_dict();
|
||||
|
||||
let code_head = r#"// This file is automatically generated. DO NOT EDIT.
|
||||
use crate::{
|
||||
model::Language,
|
||||
timeago::{TaToken, TimeUnit},
|
||||
timeago::{TaToken, TimeUnit, DateCmp},
|
||||
};
|
||||
|
||||
pub struct Entry {
|
||||
pub by_char: bool,
|
||||
pub timeago_tokens: phf::Map<&'static str, TaToken>,
|
||||
pub date_order: &'static str,
|
||||
pub date_order: &'static [DateCmp],
|
||||
pub months: phf::Map<&'static str, u8>,
|
||||
pub timeago_nd_tokens: phf::Map<&'static str, TaToken>,
|
||||
}
|
||||
"#;
|
||||
|
||||
|
|
@ -76,12 +78,33 @@ pub fn entry(lang: Language) -> Entry {
|
|||
months.entry(&txt, &n_mon.to_string());
|
||||
});
|
||||
|
||||
// Timeago(ND) tokens
|
||||
let mut ta_nd_tokens = phf_codegen::Map::<&str>::new();
|
||||
entry.timeago_nd_tokens.iter().for_each(|(txt, tu_str)| {
|
||||
let (n, unit) = parse_tu(&tu_str);
|
||||
match unit {
|
||||
Some(unit) => ta_nd_tokens.entry(
|
||||
&txt,
|
||||
&format!("TaToken {{ n: {}, unit: Some(TimeUnit::{:?}) }}", n, unit),
|
||||
),
|
||||
None => ta_nd_tokens.entry(&txt, &format!("TaToken {{ n: {}, unit: None }}", n)),
|
||||
};
|
||||
});
|
||||
|
||||
// Date order
|
||||
let mut date_order = "&[".to_owned();
|
||||
entry.date_order.chars().for_each(|c| {
|
||||
date_order += &format!("DateCmp::{}, ", c);
|
||||
});
|
||||
date_order = date_order.trim_end_matches([' ', ',']).to_owned() + "]";
|
||||
|
||||
let code_ta_tokens = &ta_tokens.build().to_string().replace('\n', "\n ");
|
||||
let code_ta_nd_tokens = &ta_nd_tokens.build().to_string().replace('\n', "\n ");
|
||||
let code_months = &months.build().to_string().replace('\n', "\n ");
|
||||
|
||||
code_timeago_tokens += &format!(
|
||||
"{} => Entry {{\n timeago_tokens: {},\n date_order: \"{}\",\n months: {},\n }},\n ",
|
||||
selector, code_ta_tokens, entry.date_order, code_months
|
||||
"{} => Entry {{\n by_char: {:?},\n timeago_tokens: {},\n date_order: {},\n months: {},\n timeago_nd_tokens: {},\n }},\n ",
|
||||
selector, entry.by_char, code_ta_tokens, date_order, code_months, code_ta_nd_tokens
|
||||
);
|
||||
});
|
||||
|
||||
|
|
|
|||
Reference in a new issue