summaryrefslogtreecommitdiffstats
path: root/crates/rebel
diff options
context:
space:
mode:
authorMatthias Schiffer <mschiffer@universe-factory.net>2024-04-20 14:36:37 +0200
committerMatthias Schiffer <mschiffer@universe-factory.net>2024-04-20 14:38:17 +0200
commitc6ffec49cdd92ef73c098e3ff7a0ca334f78f67d (patch)
treef7399279eaa3f2f798e354e38f737c100affb745 /crates/rebel
parent71763deb61745972f2fc700ca7264c99e2838754 (diff)
downloadrebel-c6ffec49cdd92ef73c098e3ff7a0ca334f78f67d.tar
rebel-c6ffec49cdd92ef73c098e3ff7a0ca334f78f67d.zip
rebel: move parsing to a separate crate
Diffstat (limited to 'crates/rebel')
-rw-r--r--crates/rebel/Cargo.toml2
-rw-r--r--crates/rebel/src/context.rs2
-rw-r--r--crates/rebel/src/main.rs1
-rw-r--r--crates/rebel/src/parse.rs72
4 files changed, 2 insertions, 75 deletions
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<T>(tag: rule<()>, value: rule<T>) -> 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(<":">, <name()>)? {
- 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::*;