diff --git a/src/check.rs b/src/check.rs index 0e6913169fa628ab47c51a9364ba27ea93057625..3ba3e97d29bb1959e9e12d15b71d336628910e18 100644 --- a/src/check.rs +++ b/src/check.rs @@ -26,6 +26,7 @@ pub struct Init { pub struct Task { pub enabled: Option<bool>, + pub path: Option<Path>, pub priority: Option<u8>, pub resources: Idents, } @@ -129,16 +130,22 @@ fn tasks(tasks: Option<::Tasks>) -> Result<Tasks> { tasks .into_iter() - .map(|(name, task)| { - Ok(( - name.clone(), - Task { - enabled: task.enabled, - priority: task.priority, - resources: ::check::idents("resources", task.resources) - .chain_err(|| format!("checking task `{}`", name))?, - }, - )) + .map(|(name_, task)| { + let name = name_.clone(); + (move || -> Result<_> { + Ok(( + name, + Task { + enabled: task.enabled, + path: task.path, + priority: task.priority, + resources: ::check::idents( + "resources", + task.resources, + )?, + }, + )) + })().chain_err(|| format!("checking task `{}`", name_)) }) .collect::<Result<_>>()? } else { diff --git a/src/lib.rs b/src/lib.rs index d7e38ff0f4e113eaa86f372a909b582ede3b14e7..7840e86d61e58e2eb279adc416c3c8d4fb726fcc 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -50,6 +50,7 @@ pub struct Idle { #[derive(Debug)] pub struct Task { pub enabled: Option<bool>, + pub path: Option<Path>, pub priority: Option<u8>, pub resources: Option<Idents>, } diff --git a/src/parse.rs b/src/parse.rs index 31381efda97641b88012468b6ec8e45d91e741c8..a00285aae08d77a0cc31d556c9824ac0fd91bc50 100644 --- a/src/parse.rs +++ b/src/parse.rs @@ -319,6 +319,7 @@ fn path(tts: &mut Peekable<Iter<TokenTree>>) -> Result<Path> { fn task(tts: &mut Peekable<Iter<TokenTree>>) -> Result<Task> { ::parse::delimited(tts, DelimToken::Brace, |tts| { let mut enabled = None; + let mut path = None; let mut priority = None; let mut resources = None; @@ -330,6 +331,13 @@ fn task(tts: &mut Peekable<Iter<TokenTree>>) -> Result<Task> { enabled = Some(::parse::bool(tts.next()) .chain_err(|| "parsing `enabled`")?); } + "path" => { + ensure!(path.is_none(), "duplicated `path` field"); + + path = Some( + ::parse::path(tts).chain_err(|| "parsing `path`")?, + ); + } "priority" => { ensure!(priority.is_none(), "duplicated `priority` field"); @@ -353,6 +361,7 @@ fn task(tts: &mut Peekable<Iter<TokenTree>>) -> Result<Task> { Ok(Task { enabled, + path, priority, resources, })