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;