Cobra Migration Guide
Mamba mirrors cobra's API. This guide shows side-by-side equivalents.
Command definition
var rootCmd = &cobra.Command{
Use: "myapp",
Short: "A brief description",
Long: "A longer description",
Run: func(cmd *cobra.Command, args []string) {
fmt.Println("Hello!")
},
}
var root = mamba.Command.init(.{
.name = "myapp",
.short = "A brief description",
.long = "A longer description",
.run = &struct {
fn run(cmd: *mamba.Command, args: []const []const u8) !void {
_ = args;
cmd.writeOut("Hello!\n");
}
}.run,
});
Flags
rootCmd.Flags().StringP("config", "c", "app.yaml", "config file")
rootCmd.Flags().IntP("port", "p", 8080, "server port")
rootCmd.Flags().BoolP("verbose", "v", false, "verbose output")
.flags = &.{
mamba.Flag.string("config", 'c', "config file", "app.yaml"),
mamba.Flag.int("port", 'p', "server port", 8080),
mamba.Flag.boolean("verbose", 'v', "verbose output", false),
},
Reading flags
Subcommands
Persistent flags
Hooks
&cobra.Command{
PersistentPreRun: func(cmd *cobra.Command, args []string) { ... },
PreRun: func(cmd *cobra.Command, args []string) { ... },
Run: func(cmd *cobra.Command, args []string) { ... },
PostRun: func(cmd *cobra.Command, args []string) { ... },
PersistentPostRun: func(cmd *cobra.Command, args []string) { ... },
}
.persistent_pre_run = &persistentPreRun,
.pre_run = &preRun,
.run = &mainRun,
.post_run = &postRun,
.persistent_post_run = &persistentPostRun,
Argument validation
Args: cobra.ExactArgs(2),
Args: cobra.MinimumNArgs(1),
Args: cobra.RangeArgs(1, 3),
Args: cobra.NoArgs,
.args = mamba.args.exactArgs(2),
.args = mamba.args.minimumNArgs(1),
.args = mamba.args.rangeArgs(1, 3),
.args = mamba.args.noArgs,
Key differences
| Aspect |
Cobra |
Mamba |
| Memory |
Heap-allocated |
Stack-allocated, zero alloc |
| Flag definition |
Runtime method calls |
Comptime struct literals |
| Error handling |
Returns error |
Returns Zig error union |
| Output |
fmt.Println / cmd.Println |
cmd.writeOut() |
| Int type |
int (platform-sized) |
i64 |
| Generics |
Interface-based |
comptime T: type |