From c6ffec49cdd92ef73c098e3ff7a0ca334f78f67d Mon Sep 17 00:00:00 2001 From: Matthias Schiffer Date: Sat, 20 Apr 2024 14:36:37 +0200 Subject: rebel: move parsing to a separate crate --- crates/rebel/Cargo.toml | 2 +- crates/rebel/src/context.rs | 2 +- crates/rebel/src/main.rs | 1 - crates/rebel/src/parse.rs | 72 --------------------------------------------- 4 files changed, 2 insertions(+), 75 deletions(-) delete mode 100644 crates/rebel/src/parse.rs (limited to 'crates/rebel') diff --git a/crates/rebel/Cargo.toml b/crates/rebel/Cargo.toml index 9d5c498..9f229c8 100644 --- a/crates/rebel/Cargo.toml +++ b/crates/rebel/Cargo.toml @@ -9,6 +9,7 @@ edition = "2021" [dependencies] rebel-common = { path = "../rebel-common" } +rebel-parse = { path = "../rebel-parse" } rebel-runner = { path = "../rebel-runner" } clap = { version = "4.0.0", features = ["derive"] } @@ -22,4 +23,3 @@ scoped-tls-hkt = "0.1.2" serde = { version = "1", features = ["derive", "rc"] } serde_yaml = "0.9" walkdir = "2" -peg = "0.8.2" diff --git a/crates/rebel/src/context.rs b/crates/rebel/src/context.rs index 084facd..fa24399 100644 --- a/crates/rebel/src/context.rs +++ b/crates/rebel/src/context.rs @@ -14,10 +14,10 @@ use rebel_common::{ string_hash::ArchiveHash, types::TaskID, }; +use rebel_parse::{self as parse, TaskFlags}; use crate::{ args::*, - parse::{self, TaskFlags}, paths, pin::{self, Pins}, task::*, diff --git a/crates/rebel/src/main.rs b/crates/rebel/src/main.rs index 54ea1cf..76b4551 100644 --- a/crates/rebel/src/main.rs +++ b/crates/rebel/src/main.rs @@ -1,7 +1,6 @@ mod args; mod context; mod driver; -mod parse; mod paths; mod pin; mod recipe; diff --git a/crates/rebel/src/parse.rs b/crates/rebel/src/parse.rs deleted file mode 100644 index 5857efb..0000000 --- a/crates/rebel/src/parse.rs +++ /dev/null @@ -1,72 +0,0 @@ -#[derive(Debug, Clone, Copy)] -pub struct TaskID<'a> { - pub recipe: &'a str, - pub task: &'a str, -} - -#[derive(Debug, Clone, Copy, Default)] -pub struct TaskArgs<'a> { - pub host: Option<&'a str>, - pub target: Option<&'a str>, -} - -#[derive(Debug, Clone, Copy)] -pub struct Task<'a> { - pub id: TaskID<'a>, - pub args: TaskArgs<'a>, -} - -#[derive(Debug, Clone, Copy)] -pub struct TaskFlags { - pub force_run: bool, -} - -peg::parser! { - grammar rules() for str { - rule t(tag: rule<()>, value: rule) -> T - = tag() v:value() { v } - - rule name_char() - = ['a'..='z' | 'A' ..='Z' | '0'..='9' | '_' | '-'] - - rule name() -> &'input str - = $(name_char()+) - - rule recipe_id() -> &'input str - = $(name() ("/" name())?) - - rule task_id() -> TaskID<'input> - = recipe:recipe_id() "::" task:name() { - TaskID { recipe, task } - } - - rule task_args() -> TaskArgs<'input> - = "@" host:name()? target:t(<":">, )? { - TaskArgs { - host, - target, - } - } - / { Default::default() } - - pub rule task() -> Task<'input> - = id:task_id() args:task_args() { - Task { - id, - args, - } - } - - rule force_run() -> bool - = "+" { true } - / { false } - - rule task_flags() -> TaskFlags - = force_run:force_run() { TaskFlags { force_run } } - - pub rule task_with_flags() -> (Task<'input>, TaskFlags) - = task:task() flags:task_flags() { (task, flags) } - } -} - -pub use rules::*; -- cgit v1.2.3