use crate::parser::{PestRule as Rule, ScriptParser};
use anyhow::Result;
use pest::Parser;
#[derive(Debug, PartialEq, Copy, Clone)]
pub enum ScriptTimezone {
Mirror,
Custom(i32),
}
pub struct ScriptTimezoneParser;
impl ScriptTimezoneParser {
pub fn parse(timezonelike_expr: &str) -> Result<i32> {
let mut power = 1;
let mut hours = 0;
let mut minutes = 0;
let pairs = ScriptParser::parse(Rule::TimezoneExpr, timezonelike_expr)?;
for expr in pairs {
match expr.as_rule() {
Rule::TimezoneExpr => {
for prop in expr.into_inner() {
match prop.as_rule() {
Rule::TimezoneNegative => power = -1,
Rule::TimezoneHours | Rule::TimezoneHours2 => {
hours = prop.as_str().parse().unwrap();
}
Rule::TimezoneMinutes => {
minutes = prop.as_str().parse().unwrap();
}
_ => {}
}
}
}
_ => {}
}
}
Ok(power * ((hours * 3600) + (minutes * 60)))
}
}