From e3071e57072c6bfb03b04d3000621ee0d3778b81 Mon Sep 17 00:00:00 2001 From: Nathan Fisher Date: Fri, 6 Jan 2023 23:53:41 -0500 Subject: [PATCH] Updated CONTRIBUTING.md --- CONTRIBUTING.md | 36 ++++++++++++++++-------------------- 1 file changed, 16 insertions(+), 20 deletions(-) diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 01b7eda..4501e07 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -17,8 +17,8 @@ in snake case. This struct must implement `Cmd`. It is recommended that this str have at least the fields `name: &'static str` and `path: crate::Path`. The trait methods `name` and `path` can then just return the corresponding fields. -The applet module should further contain a constant which is basically the -default instance for this struct. +The applet module should further implement `Default` for the struct which implements +the `Cmd` trait. ## A Simple Example Applet ```Rust @@ -26,15 +26,20 @@ default instance for this struct. use clap::Command; use super::Cmd; +#[derive(Debug)] pub struct MyApplet { name: &'static str, path: crate::Path, } -pub const MYAPPLET: MyApplet = MyApplet { - name: "myapplet", - path: crate::Path::UsrBin, -}; +impl Default for MyApplet { + fn default() -> Self { + Self { + name: "myapplet", + path: Some(crate::Path::UseBin), + } + } +} impl Cmd for MyApplet { fn name(&self) -> &str { @@ -60,18 +65,9 @@ impl Cmd for MyApplet { ``` ## Incorporating a new applet Each command module should be public in `src/cmd/mod.rs` and both the struct which -implements `Cmd` and the constant which is an instance of that struct should be -exported as public in that file. - -There are several other files which must also be edited to fully integrate a new -command. Expect improvements to this process as the Api evolves. - -- src/lib.rs: The function `run` has a match statement which checks the name with -which the program was invoked. A new match arm must be added here. -- src/cmd/bootstrap/mod.rs: The `run` method has a `Vec` of trait objects representing -all of the available applets. The constant which is an instance of the struct implementing -`Cmd` should be added to this `Vec`. --src/cmd/shitbox/mod.rs: The `cli` method will need `MYAPPLET.cli()` added in to -the `clap` subcommands. The `run` method has a match statement which checks the -subcommand that has been asked to run. A new match arm must also be added here. +implements `Cmd` should be exported as public in that file. The function `cmd::get` +has a match statement, to which should be added a line which matches the name of +the new command and returns an `Option>` for your type. The static +`cmd::COMMANDS` should have your new command's name added and the array's number +incremented by 1.