Skip to main content

ToolImpl

Struct ToolImpl 

Source
pub struct ToolImpl {
    pub def: ToolDef,
    pub exec: Option<AsyncToolExec>,
    pub exec_sync: Option<SyncToolExec>,
    pub sanitize_errors: bool,
}
Expand description

Complete tool: definition + sync/async exec functions.

Implements Builtin so it can be registered directly in a Bash interpreter or used inside a ScriptedTool.

§Example

use bashkit_scripted_tool::{ToolDef, ToolImpl};

let tool = ToolImpl::new(
    ToolDef::new("greet", "Greet a user")
        .with_schema(serde_json::json!({
            "type": "object",
            "properties": { "name": {"type": "string"} }
        })),
)
.with_exec_sync(|args| {
    let name = args.param_str("name").unwrap_or("world");
    Ok(format!("hello {name}\n"))
});

Fields§

§def: ToolDef

Tool metadata (name, description, schema, tags).

§exec: Option<AsyncToolExec>

Async exec (preferred when running in async context).

§exec_sync: Option<SyncToolExec>

Sync exec (preferred when running in sync context).

§sanitize_errors: bool

Whether callback error strings are sanitized before script-visible stderr.

Implementations§

Source§

impl ToolImpl

Source

pub fn new(def: ToolDef) -> Self

Create a ToolImpl from a ToolDef with no exec functions.

Source

pub fn with_exec<F, Fut>(self, f: F) -> Self
where F: Fn(ToolArgs) -> Fut + Send + Sync + 'static, Fut: Future<Output = Result<String, String>> + Send + 'static,

Set the async exec function.

Source

pub fn with_exec_sync( self, f: impl Fn(&ToolArgs) -> Result<String, String> + Send + Sync + 'static, ) -> Self

Set the sync exec function.

Source

pub fn sanitize_errors(self, sanitize: bool) -> Self

Control whether callback errors are sanitized before reaching stderr.

Default: true, replacing callback Err(String) with "<tool>: callback failed\n" to avoid exposing host-side secrets, paths, connection strings, or stack traces to untrusted scripts. Set to false only when callers are trusted and raw diagnostics are safe.

Trait Implementations§

Source§

impl Builtin for ToolImpl

Source§

fn execute<'life0, 'life1, 'async_trait>( &'life0 self, ctx: Context<'life1>, ) -> Pin<Box<dyn Future<Output = Result<ExecResult>> + Send + 'async_trait>>
where Self: 'async_trait, 'life0: 'async_trait, 'life1: 'async_trait,

Execute the builtin command. Read more
Source§

fn execution_plan<'life0, 'life1, 'life2, 'async_trait>( &'life0 self, _ctx: &'life1 Context<'life2>, ) -> Pin<Box<dyn Future<Output = Result<Option<ExecutionPlan>, Error>> + Send + 'async_trait>>
where 'life0: 'async_trait, 'life1: 'async_trait, 'life2: 'async_trait, Self: 'async_trait,

Return an execution plan for sub-command execution. Read more
Source§

fn llm_hint(&self) -> Option<&'static str>

Optional short hint for LLM system prompts. Read more
Source§

fn reset_session_state(&self)

Clear hidden per-instance state that must not survive snapshot restore. Read more
Source§

impl Clone for ToolImpl

Source§

fn clone(&self) -> Self

Returns a duplicate of the value. Read more
1.0.0 (const: unstable) · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> Same for T

Source§

type Output = T

Should always be Self
Source§

impl<T> ToOwned for T
where T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = !

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, !>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.