pub use crate::ast::TaskListStatus;
use crate::ast::{ListItem, Node};
pub fn checked_task(content: Vec<Node>) -> ListItem {
Node::task_list_item(TaskListStatus::Checked, content)
}
pub fn unchecked_task(content: Vec<Node>) -> ListItem {
Node::task_list_item(TaskListStatus::Unchecked, content)
}
pub fn task_list(items: Vec<(TaskListStatus, Vec<Node>)>) -> Node {
let list_items = items
.into_iter()
.map(|(status, content)| Node::task_list_item(status, content))
.collect::<Vec<_>>();
Node::UnorderedList(list_items)
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn checked_task_returns_list_item() {
let item = checked_task(vec![Node::Text("done".into())]);
assert_eq!(
item,
ListItem::Task {
status: TaskListStatus::Checked,
content: vec![Node::Text("done".into())]
}
);
}
#[test]
fn task_list_wraps_items_in_unordered_list() {
let list = task_list(vec![
(TaskListStatus::Checked, vec![Node::Text("a".into())]),
(TaskListStatus::Unchecked, vec![Node::Text("b".into())]),
]);
assert_eq!(
list,
Node::UnorderedList(vec![
ListItem::Task {
status: TaskListStatus::Checked,
content: vec![Node::Text("a".into())]
},
ListItem::Task {
status: TaskListStatus::Unchecked,
content: vec![Node::Text("b".into())]
}
])
);
}
}