From bef55ad6c559b45825337247f7ffe7703140f416 Mon Sep 17 00:00:00 2001 From: Jorge Aparicio <jorge@japaric.io> Date: Mon, 24 Jul 2017 22:43:07 -0500 Subject: [PATCH] optionally parse tasks.$T.path --- src/check.rs | 27 +++++++++++++++++---------- src/lib.rs | 1 + src/parse.rs | 9 +++++++++ 3 files changed, 27 insertions(+), 10 deletions(-) diff --git a/src/check.rs b/src/check.rs index 0e69131..3ba3e97 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 d7e38ff..7840e86 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 31381ef..a00285a 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, }) -- GitLab