mirror of
https://github.com/tursodatabase/limbo.git
synced 2025-07-16 00:44:59 +00:00
53 lines
1.4 KiB
Markdown
53 lines
1.4 KiB
Markdown
# Cli Internal Docs
|
|
|
|
## Repl Custom Commands Arg Parser
|
|
|
|
To distinguish between normal SQL queries and custom commands, we prefix a "." before our desired command. This signals to the to the REPL that you intend to use a custom command.
|
|
|
|
To implement this we use CLAP with multicall. It is very important we use multicall, else this will not work
|
|
|
|
## Adding new Commands
|
|
|
|
To add new commands, we need to modify three places:
|
|
- `commands/mod.rs`
|
|
- `commands/args.rs` or create a new file under `commands` that will describe how you will use the Args for your command
|
|
- `app.rs` to handle the execution of the command
|
|
|
|
`commands/mod.rs`
|
|
```rust
|
|
|
|
pub enum Command {
|
|
...
|
|
/// Descriptive Message for your command
|
|
Example(ExampleArgs),
|
|
}
|
|
```
|
|
|
|
`commands/args.rs`
|
|
```rust
|
|
|
|
#[derive(Debug, Clone, Args)]
|
|
pub struct ExampleArgs {
|
|
/// Example arg
|
|
pub example: String,
|
|
}
|
|
```
|
|
|
|
`app.rs`
|
|
```rust
|
|
|
|
pub fn handle_dot_command(&mut self, line: &str) {
|
|
...
|
|
Ok(cmd) => match cmd.command {
|
|
...
|
|
Command::Example(args) => {
|
|
println!("{}", args.example);
|
|
}
|
|
}
|
|
}
|
|
|
|
```
|
|
|
|
Every single option that is available to CLAP is available here. To facilitate the creation of more helpful help
|
|
messages, please use '///' in your args and command creation, so that CLAP can capture them in the codegen and create their descriptions.
|
|
|