diff options
author | Matthias Beyer <mail@beyermatthias.de> | 2020-10-14 18:05:26 +0200 |
---|---|---|
committer | Matthias Beyer <mail@beyermatthias.de> | 2020-10-14 18:05:26 +0200 |
commit | 77b7b1b04ed4039760d053cbd8fa05c7892ecb02 (patch) | |
tree | 2a376a0b337e4da0d2c2f4e5fa8a725c3c9dd3cf | |
parent | 87ae994c6031028643b62239ee9f27f3aaafbf56 (diff) |
Add script module
Signed-off-by: Matthias Beyer <mail@beyermatthias.de>
-rw-r--r-- | src/package/mod.rs | 3 | ||||
-rw-r--r-- | src/package/script.rs | 64 |
2 files changed, 67 insertions, 0 deletions
diff --git a/src/package/mod.rs b/src/package/mod.rs index 1d91205..2f4f58b 100644 --- a/src/package/mod.rs +++ b/src/package/mod.rs @@ -9,6 +9,9 @@ pub use name::*; mod package; pub use package::*; +mod script; +pub use script::*; + mod source; pub use source::*; diff --git a/src/package/script.rs b/src/package/script.rs new file mode 100644 index 0000000..2a3074f --- /dev/null +++ b/src/package/script.rs @@ -0,0 +1,64 @@ +use anyhow::Result; + +use crate::phase::Phase; +use crate::phase::PhaseName; +use crate::package::Package; + +#[derive(Debug)] +pub struct Script(String); + +pub struct ScriptBuilder { + shebang : String, +} + +impl ScriptBuilder { + // TODO: Use handlebars and templating instead of hardcoding + pub fn new(shebang: String) -> Self { + ScriptBuilder { + shebang, + } + } + + pub fn build(self, package: &Package, phaseorder: &[&PhaseName]) -> Result<Script> { + let mut script = format!("{shebang}\n", shebang = self.shebang); + + for name in phaseorder { + match package.phases().get(name) { + Some(Phase::Text(text)) => { + script.push_str(&format!(r#" + ### phase {name} + {text} + ### / phase + "#, + name = name.as_str(), + text = text, + )); + + script.push_str("\n"); + }, + + // TODO: Support path embedding + // (requires possibility to have stuff in Script type that gets copied to + // container) + Some(Phase::Path(pb)) => { + script.push_str(&format!(r#" + # Phase (from file {path}): {name} + # NOT SUPPORTED YET + exit 1 + "#, + path = pb.display(), + name = name.as_str())); + + script.push_str("\n"); + }, + + None => { + script.push_str(&format!("# No script for phase: {name}", name = name.as_str())); + script.push_str("\n"); + }, + } + } + + Ok(Script(script)) + } +} |