Imports name this capability’s declared dependencies, which fune builds next to it in your project; each one links to its page.
use super::funejson::Value; ← the fune runtime: the JSON value the test vectors use; fune build keeps it only where a signature takes one
use super::dates_add_days::add_days; ← from dates.add-days ^1.0.0 · built alongside by fune
use super::todo_item::Recurrence; ← from todo.item ^1.0.0 · built alongside by fune
use super::todo_item_validate_draft::{recurrence_from_value, recurrence_to_value};
/// The repeat a todo keeps when its due date is edited: a moved date becomes
/// the anchor; an unchanged date keeps it (so a month-end series that has
/// rolled forward stays on the month end).
///
/// # Panics
/// On a malformed or impossible date (dates.add-days's message).
pub fn reschedule_recurrence(recurrence: Option<&Recurrence>, from_due: Option<&str>, to_due: Option<&str>) -> Option<Recurrence> {
if let Some(date) = from_due {
add_days(date, 0);
}
if let Some(date) = to_due {
add_days(date, 0);
}
let rule = recurrence?;
add_days(&rule.anchor, 0);
match to_due {
Some(date) if Some(date) != from_due => Some(Recurrence { anchor: date.to_string(), ..rule.clone() }),
_ => Some(rule.clone()),
}
}
fn opt_date(v: &Value) -> Option<&str> {
if v.is_null() { None } else { Some(v.as_str()) }
}
pub fn fune_vector(args: &[Value]) -> Value {
let rule = recurrence_from_value(&args[0]);
recurrence_to_value(&reschedule_recurrence(rule.as_ref(), opt_date(&args[1]), opt_date(&args[2])))
}