synthphonia/text/parsing/
weekday.rs1use std::collections::HashSet;
2
3use chrono::{Datelike, Month, NaiveDate, NaiveTime};
4use itertools::Itertools;
5use regex::Regex;
6use crate::galloc::TryAllocForExactSizeIter;
7
8use crate::value::ConstValue;
9use crate::{galloc::AllocForExactSizeIter, expr::{Expr, ops}, impl_basic, impl_op1_opt, new_op1_opt, value::Value};
10
11use super::ParsingOp;
12
13
14use chrono::Timelike;
15
16impl_basic!(ParseWeekday, "weekday.parse");
17impl crate::forward::enumeration::Enumerator1 for ParseWeekday {
18 fn enumerate(&self, this: &'static ops::Op1Enum, exec: &'static crate::forward::executor::Executor, opnt: [usize; 1]) -> Result<(), ()> { Ok(())}
19}
20
21impl_op1_opt!(ParseWeekday, "weekday.parse",
22 Str -> Int { |s1| -> Option<i64> {
23 todo!()
24 }}
25);
26
27impl ParsingOp for ParseWeekday {
28 fn parse_into(&self, input: &'static str) -> std::vec::Vec<(&'static str, ConstValue)> {
29 let months = [ "Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"];
30 let mut result: Vec<(&'static str, ConstValue)> = Vec::new();
31 let weekday_literal = r"Sun(day)?|Mon(day)?|Tue(sday)?|Wed(nesday)?|Thu(r|rsday)?|Fri(day)?|Sat(urday)?";
32 let regex5 = Regex::new(weekday_literal.to_string().as_str()).unwrap();
33 let iter = regex5.captures_iter(input);
34 for m in iter {
35 let month = months.iter().enumerate().find(|(i, s)| ***s == m.get(0).unwrap().as_str()[0..3]).unwrap().0 as u32 + 1;
36 result.push((m.get(0).unwrap().as_str(), month.into()));
37 }
38 result
39 }
40}