kodegen_bash_shell/
lib.rs

1//! kodegen-bash-shell: Embeddable POSIX/bash shell with cancellation support.
2//!
3//! This is a permanent fork of [brush-shell](https://github.com/reubeno/brush) with
4//! programmatic command cancellation support via `CancellationToken`.
5//!
6//! # Quick Start
7//!
8//! ```rust,no_run
9//! use kodegen_bash_shell::{Shell, ExecutionResult};
10//!
11//! #[tokio::main]
12//! async fn main() -> anyhow::Result<()> {
13//!     let mut shell = Shell::builder().build().await?;
14//!     let result = shell.exec("echo 'Hello!'", &shell.default_exec_params()).await?;
15//!     Ok(())
16//! }
17//! ```
18//!
19//! # Custom Builtins
20//!
21//! See the `custom-builtin` example for how to implement custom shell builtins.
22
23pub mod builtins;
24pub mod core;
25pub mod interactive;
26pub mod parser;
27pub mod shell;
28
29// ============================================================================
30// Prelude - commonly used types for building shells and custom builtins
31// ============================================================================
32
33/// Prelude module for convenient glob imports.
34///
35/// ```rust
36/// use kodegen_bash_shell::prelude::*;
37/// ```
38pub mod prelude {
39    // Core shell types
40    pub use crate::core::{
41        CommandArg, CreateOptions, Error, ErrorKind, ExecutionContext, ExecutionControlFlow,
42        ExecutionExitCode, ExecutionParameters, ExecutionResult, ExecutionSpawnResult,
43        ProcessGroupPolicy, Shell, ShellBuilder, ShellBuilderState, ShellFd, ShellValue,
44        ShellVariable, BuiltinError, OutputStreamType, StreamingOutput,
45    };
46
47    // Builtin command infrastructure
48    pub use crate::core::builtins::{
49        builtin, decl_builtin, simple_builtin, Command, ContentType, DeclarationCommand,
50        Registration, SimpleCommand,
51    };
52
53    // Builtin registration
54    pub use crate::builtins::{BuiltinSet, ShellBuilderExt, default_builtins};
55
56    // Open files / file descriptors
57    pub use crate::core::openfiles::{self, OpenFile, OpenFiles};
58
59    // Parser types
60    pub use crate::parser::{
61        ParseError, Parser, ParserBuilder, ParserOptions, SourceInfo, Token, TokenLocation,
62        TokenizerError, TokenizerOptions,
63    };
64
65    // Cancellation support
66    pub use tokio_util::sync::CancellationToken;
67
68    // Type alias for convenience (matches ExitCode usage in kodegen-tools-terminal)
69    pub type ExitCode = ExecutionExitCode;
70}
71
72// ============================================================================
73// Re-exports at crate root for backwards compatibility and convenience
74// ============================================================================
75
76// Re-export CancellationToken for users
77pub use tokio_util::sync::CancellationToken;
78
79// Re-export commonly used types from core at crate root
80pub use core::{
81    BuiltinError, CommandArg, CreateOptions, Error, ErrorKind, ExecutionContext,
82    ExecutionControlFlow, ExecutionExitCode, ExecutionParameters, ExecutionResult,
83    ExecutionSpawnResult, ProcessGroupPolicy, Shell, ShellBuilder, ShellBuilderState, ShellFd,
84    ShellValue, ShellVariable, OutputStreamType, StreamingOutput,
85};
86
87// Re-export openfiles module for file descriptor manipulation
88pub use core::openfiles;
89
90// Re-export parser types
91pub use parser::{
92    ParseError, Parser, ParserBuilder, ParserOptions, SourceInfo, Token, TokenLocation,
93    TokenizerError, TokenizerOptions,
94};
95
96// Re-export builtins types
97pub use builtins::{BuiltinSet, ShellBuilderExt, default_builtins};
98
99// Re-export Command trait and builtin function for custom builtins
100pub use core::builtins::{builtin, Command, ContentType, DeclarationCommand, Registration};
101
102// Type alias for convenience (matches ExitCode usage in kodegen-tools-terminal)
103pub type ExitCode = ExecutionExitCode;