summaryrefslogtreecommitdiff
path: root/mingling/README.md
diff options
context:
space:
mode:
author魏曹先生 <1992414357@qq.com>2026-03-29 14:50:59 +0800
committer魏曹先生 <1992414357@qq.com>2026-03-29 14:50:59 +0800
commitaaa9001d99b7846da0cd40afca06e7c457e711d6 (patch)
tree63a07a93d25515cd9c6047e7eef3ad5479a6c41d /mingling/README.md
parent5d91f0e9408e39afaa75f96b32c5ed7946a558f7 (diff)
Add README and license files to project structure
Diffstat (limited to 'mingling/README.md')
-rw-r--r--mingling/README.md70
1 files changed, 70 insertions, 0 deletions
diff --git a/mingling/README.md b/mingling/README.md
new file mode 100644
index 0000000..8872607
--- /dev/null
+++ b/mingling/README.md
@@ -0,0 +1,70 @@
+# Mìng Lìng - Command
+
+> [!WARNING]
+>
+> **Note**: Mingling is still under active development, and its API may change. Feel free to try it out and give us feedback!
+
+`Mingling` is a Rust command-line framework. Its name comes from the Chinese Pinyin for "命令", which means "Command".
+
+## Quick Start
+
+The example below shows how to use `Mingling` to create a simple command-line program:
+
+```rust
+use mingling::{
+ hint::NoDispatcherFound,
+ macros::{dispatcher, program, r_println, renderer},
+};
+
+#[tokio::main]
+async fn main() {
+ let mut program = MyProgram::new();
+ program.with_dispatcher(HelloCommand);
+ program.exec().await;
+}
+
+dispatcher!("hello", HelloCommand => HelloEntry);
+
+#[renderer]
+pub fn render_hello(_prev: HelloEntry) {
+ r_println!("Hello, World!")
+}
+
+#[renderer]
+pub fn render_no_dispatcher_found(prev: NoDispatcherFound) {
+ r_println!("Subcommand not found: '{}'", prev.args.join(", "))
+}
+
+program!(MyProgram);
+```
+
+Output:
+
+```
+> mycmd hello
+Hello, World!
+> mycmd hallo
+Subcommand not found: 'mycmd hallo'
+```
+
+## Core Concepts
+
+Mingling abstracts command execution into the following parts:
+
+1. **Dispatcher** - Routes user input to a specific renderer or chain based on the command node name.
+2. **Chain** - Transforms the incoming type into another type, passing it to the next chain or renderer.
+3. **Renderer** - Stops the chain and prints the currently processed type to the terminal.
+4. **Program** - Manages the lifecycle and configuration of the entire CLI application.
+
+## Project Structure
+
+The Mingling project consists of two main parts:
+
+- **[mingling/](mingling/)** - The core runtime library, containing type definitions, error handling, and basic functionality.
+- **[mingling_macros/](mingling_macros/)** - The procedural macro library, providing declarative macros to simplify development.
+
+## License
+
+This project is licensed under the MIT License.
+
+See [LICENSE-MIT](LICENSE-MIT) or [LICENSE-APACHE](LICENSE-APACHE) file for details.