cli: add dev command for enums experiment

This commit is contained in:
Schrottkatze 2024-02-19 18:07:09 +01:00
parent 33a1d85318
commit 3af262258e
Signed by: schrottkatze
SSH key fingerprint: SHA256:hXb3t1vINBFCiDCmhRABHX5ocdbLiKyCdKI4HK2Rbbc
4 changed files with 43 additions and 4 deletions

1
Cargo.lock generated
View file

@ -66,6 +66,7 @@ dependencies = [
"eval", "eval",
"ir", "ir",
"owo-colors", "owo-colors",
"prowocessing",
"ron", "ron",
"serde", "serde",
"serde_json", "serde_json",

View file

@ -11,6 +11,7 @@ clap = { workspace = true, features = [ "derive", "env" ] }
dirs = "5" dirs = "5"
eval = { path = "../eval" } eval = { path = "../eval" }
ir = { path = "../ir" } ir = { path = "../ir" }
prowocessing = { path = "../prowocessing"}
owo-colors = "4" owo-colors = "4"
ron = "0.8" ron = "0.8"
serde = { workspace = true, features = [ "derive" ] } serde = { workspace = true, features = [ "derive" ] }

View file

@ -2,6 +2,7 @@ use std::{fs, path::PathBuf};
use clap::{Parser, Subcommand}; use clap::{Parser, Subcommand};
use config::{CliConfigs, Config}; use config::{CliConfigs, Config};
use dev::DevCommands;
use welcome_msg::print_startup_msg; use welcome_msg::print_startup_msg;
mod config; mod config;
@ -24,7 +25,10 @@ enum Commands {
/// What file contains the pipeline to evaluate. /// What file contains the pipeline to evaluate.
source: PathBuf, source: PathBuf,
}, },
Dev, Dev {
#[command(subcommand)]
dev_command: DevCommands,
},
} }
fn main() { fn main() {
@ -46,8 +50,34 @@ fn main() {
machine.feed(ir); machine.feed(ir);
machine.eval_full(); machine.eval_full();
} }
Commands::Dev => { Commands::Dev { dev_command } => dev_command.run(),
println!("Hello world!"); }
}
mod dev {
use clap::Subcommand;
use prowocessing::experimental::enum_based::{Pipeline, PipelineBuilder};
#[derive(Subcommand)]
pub(crate) enum DevCommands {
Enums { test_str: String },
}
impl DevCommands {
pub fn run(self) {
match self {
DevCommands::Enums { test_str } => {
let upr = PipelineBuilder::new()
.insert(prowocessing::experimental::enum_based::Instruction::Uppercase)
.build();
let lwr = PipelineBuilder::new()
.insert(prowocessing::experimental::enum_based::Instruction::Lowercase)
.build();
println!("Upr: {}", upr.run(test_str.clone()));
println!("Lwr: {}", lwr.run(test_str.clone()));
}
}
} }
} }
} }

View file

@ -7,7 +7,7 @@ use experimental::enum_based::{Instruction, PipelineBuilder};
/// just some experiments, to test whether the architecture i want is even possible (or how to do it). probably temporary. /// just some experiments, to test whether the architecture i want is even possible (or how to do it). probably temporary.
/// Gonna first try string processing... /// Gonna first try string processing...
mod experimental { pub mod experimental {
pub mod enum_based { pub mod enum_based {
pub enum Instruction { pub enum Instruction {
Uppercase, Uppercase,
@ -41,6 +41,7 @@ mod experimental {
} }
} }
#[must_use]
pub fn insert(mut self, instr: Instruction) -> Self { pub fn insert(mut self, instr: Instruction) -> Self {
self.pipeline.push(instr); self.pipeline.push(instr);
self self
@ -66,6 +67,12 @@ mod experimental {
Pipeline { pipeline: res } Pipeline { pipeline: res }
} }
} }
impl Default for PipelineBuilder {
fn default() -> Self {
Self::new()
}
}
} }
} }