3 releases (breaking)
0.3.0 | Sep 7, 2021 |
---|---|
0.2.0 | Sep 1, 2021 |
0.1.0 | Aug 26, 2021 |
#1794 in Parser implementations
78KB
2K
SLoC
tdtxt
A rust library for de(serializing) files and text in the todo.txt format.
STATE
This crate is still in development, the api may not stable and could change in the future.
This crate should not be used in production code.
Usage
Add it to the dependencies of your Cargo.toml
:
[dependencies]
tdtxt = "0.2"
Then use it:
use std::str::FromStr as _;
use tdtxt::{Task, Date, State, Priority, DateCompound};
let line = "x (A) 2016-05-20 2016-04-30 measure space for +chapelShelving @chapel due:2016-05-30";
let task = Task::from_str(line).unwrap();
assert_eq!(task.state(), &State::Done);
assert_eq!(task.priority(), Some(&Priority::A));
assert_eq!(task.date_compound(), Some(&DateCompound::Completed { created: Date::ymd(2016, 4, 30), completed: Date::ymd(2016, 5, 20) }));
assert_eq!(task.description().description(), "measure space for +chapelShelving @chapel due:2016-05-30");
assert_eq!(task.description().projects().collect::<Vec<_>>(), vec!["chapelShelving"]);
assert_eq!(task.description().contexts().collect::<Vec<_>>(), vec!["chapel"]);
assert_eq!(task.description().custom().collect::<Vec<_>>(), vec![("due", "2016-05-30")]);
use std::str::FromStr as _;
use tdtxt::{Task, Date, State, Priority, DateCompound};
let line = "x (A) 2016-05-20 2016-04-30 measure space for +chapelShelving @chapel due:2016-05-30";
let task = Task::build()
.state(State::Done)
.priority(Priority::A)
.date_compound(DateCompound::completed(Date::ymd(2016, 4, 30), Date::ymd(2016, 5, 20)))
.build("measure space for +chapelShelving @chapel due:2016-05-30");
assert_eq!(format!("{}", task), line);
assert_eq!(task.state(), &State::Done);
assert_eq!(task.priority(), Some(&Priority::A));
assert_eq!(task.date_compound(), Some(&DateCompound::Completed { created: Date::ymd(2016, 4, 30), completed: Date::ymd(2016, 5, 20) }));
assert_eq!(task.description().description(), "measure space for +chapelShelving @chapel due:2016-05-30");
assert_eq!(task.description().projects().collect::<Vec<_>>(), vec!["chapelShelving"]);
assert_eq!(task.description().contexts().collect::<Vec<_>>(), vec!["chapel"]);
assert_eq!(task.description().custom().collect::<Vec<_>>(), vec![("due", "2016-05-30")]);
Examples
For more detailed examples, see the examples/
directory.
Run one:
# Example `filter_open`
cargo run --example filter_open -- examples/todos.txt
Features
Serde (serde
)
Serialize and deserialize the Task struct with serde.
Examples
use tdtxt::{Task, Date, State, Priority, DateCompound};
let task_should = Task::build()
.state(State::Done)
.priority(Priority::A)
.date_compound(DateCompound::completed(
Date::ymd(2016, 4, 30),
Date::ymd(2016, 5, 20),
))
.build("measure space for +chapelShelving @chapel due:2016-05-30");
let json = serde_json::to_string_pretty(&task_should).unwrap();
println!("{}", &json);
Example json output:
{
"state": "Done",
"priority": "A",
"created": "2016-04-30",
"completed": "2016-05-20",
"description": "measure space for +chapelShelving @chapel due:2016-05-30"
}
NOTE
The order in which created
and completed
appear matters.
Dependencies
~0–440KB