diff options
Diffstat (limited to 'mling')
| -rw-r--r-- | mling/src/proj_mgr/mod.rs | 9 | ||||
| -rw-r--r-- | mling/src/proj_mgr/show_directories.rs | 55 |
2 files changed, 62 insertions, 2 deletions
diff --git a/mling/src/proj_mgr/mod.rs b/mling/src/proj_mgr/mod.rs index 3e94a3f..b282203 100644 --- a/mling/src/proj_mgr/mod.rs +++ b/mling/src/proj_mgr/mod.rs @@ -9,8 +9,13 @@ pub mod metadata; mod show_binaries; pub use show_binaries::*; +mod show_directories; +pub use show_directories::*; + dispatcher!("show.binaries"); -dispatcher!("show.workspace"); +dispatcher!("show.workspace-dir", + CMDShowWorkspaceDirectory => EntryShowWorkspaceDirectory +); dispatcher!("show.target-dir", CMDShowTargetDirectories => EntryShowTargetDirectories ); @@ -18,6 +23,6 @@ dispatcher!("show.target-dir", #[program_setup] pub fn project_manager_setup(p: &mut Program<ThisProgram>) { p.with_dispatcher(CMDShowBinaries); - p.with_dispatcher(CMDShowWorkspace); + p.with_dispatcher(CMDShowWorkspaceDirectory); p.with_dispatcher(CMDShowTargetDirectories); } diff --git a/mling/src/proj_mgr/show_directories.rs b/mling/src/proj_mgr/show_directories.rs new file mode 100644 index 0000000..32020c9 --- /dev/null +++ b/mling/src/proj_mgr/show_directories.rs @@ -0,0 +1,55 @@ +use colored::Colorize; +use mingling::{ + Groupped, + macros::{chain, pack, r_println, renderer}, +}; +use serde::Serialize; + +use crate::{ + EntryShowTargetDirectories, EntryShowWorkspaceDirectory, Next, metadata::read_metadata, + res::ResManifestPath, +}; + +#[derive(Serialize, Groupped)] +pub struct ResultWorkspaceDirectory { + pub path: String, +} + +#[derive(Serialize, Groupped)] +pub struct ResultTargetDirectory { + pub path: String, +} + +#[chain] +pub fn handle_show_workspace_directory( + _args: EntryShowWorkspaceDirectory, + manifest_path: &ResManifestPath, +) -> Next { + let metadata = read_metadata(manifest_path.resolved()).unwrap(); + ResultWorkspaceDirectory { + path: metadata.workspace_root, + } + .to_render() +} + +#[chain] +pub fn handle_show_target_directory( + _args: EntryShowTargetDirectories, + manifest_path: &ResManifestPath, +) -> Next { + let metadata = read_metadata(manifest_path.resolved()).unwrap(); + ResultTargetDirectory { + path: metadata.target_directory, + } + .to_render() +} + +#[renderer] +pub fn render_workspace_directory(prev: ResultWorkspaceDirectory) { + r_println!("{}", prev.path.bright_cyan().bold()); +} + +#[renderer] +pub fn render_target_directory(prev: ResultTargetDirectory) { + r_println!("{}", prev.path.bright_cyan().bold()); +} |
