pub struct AgentBuilder<S: StateStoreBackend = StateStore, D: DatabaseBackend = Database, P: ProviderBackend = Provider, T: ToolsetBackend = Toolset> { /* private fields */ }Expand description
Configures creation or reopening of one durable Agent.
The builder accepts already-built provider, tool, and storage values without
exposing their implementation details through agents-kit.
The hierarchy preserves concrete S, D, P and T types, with no Clone
requirement on caller backends or T::Handler. New identity creation and
durable reopen use separate constructors; reopening resupplies integrations
instead of reconstructing credentials or lower configuration from records.
Native Codex/OpenCode can select P as static composition context without
owning a provider value. Custom requires a value through Self::with_provider.
The builder owns supplied values, while Self::build accepts construction
and cleanup work. Await consuming AgentBackend::shutdown on the built Agent
while its runtime remains driven.
The local example uses memory Lance and a passively constructed Provider. It selects an exact model without verifying a running service or generating output.
See the construction example and Self::reopen for durable reopen.
Implementations§
Source§impl<S: StateStoreBackend> AgentBuilder<S, Database, Provider>
impl<S: StateStoreBackend> AgentBuilder<S, Database, Provider>
Sourcepub fn create(config: AgentConfig, storage: AgentStorage<S>) -> Self
pub fn create(config: AgentConfig, storage: AgentStorage<S>) -> Self
Configures a new durable agent over the required control-plane store.
This records creation intent without opening a backend. Self::build creates
a fresh durable identity. Storage is required up front and retains its exact
associated transaction type. For an existing identity use Self::reopen.
See the construction example. To choose caller-owned lower types, see Self::with_provider and Self::with_toolset.
Sourcepub fn create_for_backends<P2: ProviderBackend, T2: ToolsetBackend>(
config: AgentConfig,
storage: AgentStorage<S>,
) -> AgentBuilder<S, Database, P2, T2>
pub fn create_for_backends<P2: ProviderBackend, T2: ToolsetBackend>( config: AgentConfig, storage: AgentStorage<S>, ) -> AgentBuilder<S, Database, P2, T2>
Configures a new agent with fixed Provider and Toolset implementation types.
Codex and OpenCode retain their native providers, so this selects only
the static provider type shared with other agents in a caller-owned
composition. Custom agents receive their provider value through
Self::with_provider. Repeated Self::with_toolset calls append T2
values to one homogeneous inventory without normalization or a Clone bound.
See Self::reopen_for_backends for typed creation and reopening.
Self::with_provider and Self::with_toolset accept caller-owned lower types.
Sourcepub fn reopen(
config: AgentConfig,
storage: AgentStorage<S>,
id: AgentId,
) -> Self
pub fn reopen( config: AgentConfig, storage: AgentStorage<S>, id: AgentId, ) -> Self
Configures reopening of an existing durable agent.
Selects an existing identity; it never falls back to creating one. Build checks
stored compatibility and the storage clone family’s live-ownership claim.
Resupply fresh provider/tool/database values required by that identity.
An AgentStorage clone shares coordination without requiring S: Clone.
§Examples
This owns one Lance directory and reopens it through a fresh connection. Memory stores instead require the same retained storage family. Shutdown is awaited before inspection errors are propagated; unsuccessful runs retain their files.
use std::{num::NonZeroUsize, time::Duration};
use agents_kit::{AgentBackend, AgentBuilder, AgentStorage};
use agents_kit::config::{AgentConfig, CustomAgentConfig, CustomLoopLimits, CustomToolApproval};
use agents_kit::{model::ModelSelector, tool::ToolSelection};
use providers_kit::{Provider, ProviderConfig};
use providers_kit::config::{OllamaConfig, ProviderKind, TransportConfig};
use storage_kit::{StateStore, state::config::{LanceStateStoreConfig, StateStoreConfig}};
let directory = std::env::temp_dir().join(format!("agent-reopen-doc-{}", uuid::Uuid::new_v4()));
std::fs::create_dir(&directory)?;
let store_config = StateStoreConfig::lance(LanceStateStoreConfig::directory(&directory));
let custom = CustomAgentConfig::new(ModelSelector::new("exact-model")?, ToolSelection::None,
CustomLoopLimits::new(4, 0, 1)?, CustomToolApproval::Deny)?;
let config = AgentConfig::new(custom.into(), Duration::from_secs(10), NonZeroUsize::MIN)?;
let provider_config = ProviderConfig::new(
ProviderKind::Ollama(OllamaConfig::local()), TransportConfig::default(),
);
let store = StateStore::connect(store_config.clone()).await?;
let agent = AgentBuilder::create(config.clone(), AgentStorage::new(store))
.with_provider(Provider::from_config(provider_config.clone())?).build().await?;
let id = agent.id();
agent.shutdown().await?;
let store = StateStore::connect(store_config).await?;
let reopened = AgentBuilder::reopen(config, AgentStorage::new(store), id.clone())
.with_provider(Provider::from_config(provider_config)?).build().await?;
let result = reopened.info().await;
let cleanup = reopened.shutdown().await;
let info = match (result, cleanup) {
(Ok(info), Ok(())) => Ok(info),
(Err(primary), Err(cleanup)) => Err(primary.with_supplementary(cleanup)),
(Err(error), _) | (_, Err(error)) => Err(error),
}?;
assert_eq!(info.id(), &id);
// Only successful shutdown and readback permit deleting this owned directory.
std::fs::remove_dir_all(directory)?;Sourcepub fn reopen_for_backends<P2: ProviderBackend, T2: ToolsetBackend>(
config: AgentConfig,
storage: AgentStorage<S>,
id: AgentId,
) -> AgentBuilder<S, Database, P2, T2>
pub fn reopen_for_backends<P2: ProviderBackend, T2: ToolsetBackend>( config: AgentConfig, storage: AgentStorage<S>, id: AgentId, ) -> AgentBuilder<S, Database, P2, T2>
Configures reopening with fixed Provider and Toolset implementation types.
This is the reopening counterpart to Self::create_for_backends. It
selects no provider value and performs no provider operation.
§Examples
use std::{num::NonZeroUsize, time::Duration};
use agents_kit::{AgentBackend, AgentBuilder, AgentStorage};
use agents_kit::config::{AgentConfig, CustomAgentConfig, CustomLoopLimits, CustomToolApproval};
use agents_kit::{model::ModelSelector, tool::ToolSelection};
use providers_kit::{Provider, ProviderConfig, config::{OllamaConfig, ProviderKind, TransportConfig}};
use storage_kit::{StateStore, state::config::{LanceStateStoreConfig, StateStoreConfig}};
let store = StateStore::connect(StateStoreConfig::Lance(LanceStateStoreConfig::memory())).await?;
let storage = AgentStorage::new(store);
let custom = CustomAgentConfig::new(ModelSelector::new("exact-model")?, ToolSelection::None,
CustomLoopLimits::new(4, 0, 1)?, CustomToolApproval::Deny)?;
let config = AgentConfig::new(custom.into(), Duration::from_secs(10), NonZeroUsize::MIN)?;
let provider_config = ProviderConfig::new(ProviderKind::Ollama(OllamaConfig::local()), TransportConfig::default());
let provider = Provider::from_config(provider_config.clone())?;
let agent = AgentBuilder::create_for_backends::<Provider, tools_kit::Toolset>(
config.clone(), storage.clone(),
)
.with_provider(provider).build().await?;
let id = agent.id();
agent.shutdown().await?;
let builder = AgentBuilder::reopen_for_backends::<Provider, tools_kit::Toolset>(
config, storage, id.clone(),
);
let reopened = builder.with_provider(Provider::from_config(provider_config)?).build().await?;
let reopened_id = reopened.id();
reopened.shutdown().await?;
assert_eq!(reopened_id, id);Source§impl<S: StateStoreBackend, D: DatabaseBackend, P: ProviderBackend, T: ToolsetBackend> AgentBuilder<S, D, P, T>
impl<S: StateStoreBackend, D: DatabaseBackend, P: ProviderBackend, T: ToolsetBackend> AgentBuilder<S, D, P, T>
Sourcepub fn with_provider<P2: ProviderBackend>(
self,
provider: P2,
) -> AgentBuilder<S, D, P2, T>
pub fn with_provider<P2: ProviderBackend>( self, provider: P2, ) -> AgentBuilder<S, D, P2, T>
Supplies the already-built provider required by the Custom backend.
Consumes the provider and changes the builder’s concrete provider parameter; accepted Toolsets and the Database remain attached. Replacing an earlier value drops that value, so complete any required lower lifecycle work before replacing it. Codex/OpenCode reject a supplied provider value during build; use typed construction to select their static provider parameter without a value.
See the construction example.
Direct implementations retain P::Model and T::Handler; neither T nor
its handler requires Clone. See providers_kit::ProviderBackend and
tools_kit::ToolsetBackend for runnable implementations, and the
Custom composition examples
for their use together with the real agent loop. Other lower operations
keep their owning trait’s explicit unsupported behavior.
Sourcepub fn with_toolset(self, toolset: T) -> Self
pub fn with_toolset(self, toolset: T) -> Self
Appends one already-built executable Toolset implementation.
T remains fixed by construction. Changing the Provider or Database keeps
every accepted Toolset; its unique Handler remains associated as T::Handler.
Each call appends a value of the construction-selected T; use caller-owned
exhaustive Toolset/Handler enums for heterogeneous sources. Custom executes the
associated Handler directly. Build validates unique effective names and selected
tools before publication. Native support is backend-specific: OpenCode rejects
supplied executable toolsets. Builder transfer alone never invokes a handler.
§Examples
use std::{num::NonZeroUsize, time::Duration};
use agents_kit::{AgentBackend, AgentBuilder, AgentStorage};
use agents_kit::config::{AgentConfig, CustomAgentConfig, CustomLoopLimits, CustomToolApproval};
use agents_kit::{model::ModelSelector, tool::ToolSelection};
use providers_kit::{Provider, ProviderConfig, config::{OllamaConfig, ProviderKind, TransportConfig}};
use storage_kit::{StateStore, state::config::{LanceStateStoreConfig, StateStoreConfig}};
let store = StateStore::connect(StateStoreConfig::Lance(LanceStateStoreConfig::memory())).await?;
let storage = AgentStorage::new(store);
let custom = CustomAgentConfig::new(ModelSelector::new("exact-model")?, ToolSelection::None,
CustomLoopLimits::new(4, 0, 1)?, CustomToolApproval::Deny)?;
let config = AgentConfig::new(custom.into(), Duration::from_secs(10), NonZeroUsize::MIN)?;
let provider_config = ProviderConfig::new(ProviderKind::Ollama(OllamaConfig::local()), TransportConfig::default());
let provider = Provider::from_config(provider_config.clone())?;
use tools_kit::{Toolset, declaration::{ToolInfo, ToolName}, execution::ToolResult,
local::ToolRegistration, schema::JsonSchema};
let tools = Toolset::local(vec![ToolRegistration::function(
ToolInfo::new(ToolName::new("ping")?, JsonSchema::strict(serde_json::json!({"type":"object"}))),
|_| async { Ok(ToolResult::text("pong")) },
)])?;
let agent = AgentBuilder::create(config, storage)
.with_toolset(tools).with_provider(provider).build().await?;
let result = agent.list_workspaces().await;
// Shutdown settles the transferred Toolset and Provider even if listing failed.
let cleanup = agent.shutdown().await;
let workspaces = match (result, cleanup) {
(Ok(value), Ok(())) => Ok(value),
(Err(primary), Err(cleanup)) => Err(primary.with_supplementary(cleanup)),
(Err(error), _) | (_, Err(error)) => Err(error),
}?;
assert!(workspaces.is_empty());Sourcepub fn with_knowledge_database<D2: DatabaseBackend>(
self,
database: D2,
) -> AgentBuilder<S, D2, P, T>
pub fn with_knowledge_database<D2: DatabaseBackend>( self, database: D2, ) -> AgentBuilder<S, D2, P, T>
Supplies the Database used by the private managed-knowledge owner.
Consumes a direct Database implementation and changes only the builder’s
concrete D parameter. Existing Toolsets and Provider remain attached. This
Database is separate from AgentStorage’s control-plane records and exposes no
public knowledge runtime. Reopen must resupply a compatible Database when the
durable identity requires managed knowledge.
See IngestKnowledgeRequest for request construction and the Custom composition examples for caller-owned knowledge storage.
Sourcepub async fn build(self) -> Result<Agent<S, D, P, T>, KitError>
pub async fn build(self) -> Result<Agent<S, D, P, T>, KitError>
Validates the complete configuration and creates or reopens the agent.
Takes ownership of construction after acceptance. On failure, prepared resources are cleaned in reverse ownership order within the lifecycle deadline; the first failure remains primary and later failures remain supplementary. Losing the caller observation does not detach accepted build/cleanup ownership.
On success the unique Agent owns its runtime and transferred integrations. Keep Tokio and lower runtimes driven through consuming shutdown. Custom model selection alone does not verify remote model availability; later provider operations own service validation.
§Errors
Returns InvalidConfig for invalid backend/integration combinations (including a
missing Custom provider), Unsupported for a supplied integration the selected
backend cannot represent, and Conflict/Busy for incompatible or already-owned
reopen state. Missing identities use NotFound; malformed durable evidence uses
InvalidState. Process, transport, protocol, storage and deadline failures retain
their owning portable classification. Inspect KitError::kind and
KitError::context; build and reopen carry distinct operation context.
This example requires an installed, configured codex executable and its real
App Server process. It does not submit a model prompt.
§Examples
use std::{num::NonZeroUsize, time::Duration};
use agents_kit::{AgentBackend, AgentBuilder, AgentStorage};
use agents_kit::config::{AgentConfig, CodexConfig};
use storage_kit::{StateStore, state::config::{LanceStateStoreConfig, StateStoreConfig}};
let config = AgentConfig::new(CodexConfig::spawn(Duration::from_secs(15),
Duration::from_secs(60))?.into(), Duration::from_secs(30), NonZeroUsize::MIN)?;
let store = StateStore::connect(StateStoreConfig::Lance(LanceStateStoreConfig::memory())).await?;
let agent = AgentBuilder::create(config, AgentStorage::new(store)).build().await?;
let observed = agent.info().await;
let cleanup = agent.shutdown().await;
let info = match (observed, cleanup) {
(Ok(value), Ok(())) => Ok(value),
(Err(primary), Err(cleanup)) => Err(primary.with_supplementary(cleanup)),
(Err(error), _) | (_, Err(error)) => Err(error),
}?;
assert!(!info.id().as_str().is_empty());Auto Trait Implementations§
impl<S, D, P, T> Freeze for AgentBuilder<S, D, P, T>
impl<S, D, P, T> RefUnwindSafe for AgentBuilder<S, D, P, T>where
AgentStorage<S>: RefUnwindSafe,
Option<P>: RefUnwindSafe,
Vec<Arc<T>>: RefUnwindSafe,
Option<D>: RefUnwindSafe,
impl<S, D, P, T> Send for AgentBuilder<S, D, P, T>
impl<S, D, P, T> Sync for AgentBuilder<S, D, P, T>
impl<S, D, P, T> Unpin for AgentBuilder<S, D, P, T>
impl<S, D, P, T> UnsafeUnpin for AgentBuilder<S, D, P, T>where
AgentStorage<S>: UnsafeUnpin,
Option<P>: UnsafeUnpin,
Vec<Arc<T>>: UnsafeUnpin,
Option<D>: UnsafeUnpin,
impl<S, D, P, T> UnwindSafe for AgentBuilder<S, D, P, T>where
AgentStorage<S>: UnwindSafe,
Option<P>: UnwindSafe,
Vec<Arc<T>>: UnwindSafe,
Option<D>: UnwindSafe,
Blanket Implementations§
impl<T> Allocation for T
Source§impl<T> ArchivePointee for T
impl<T> ArchivePointee for T
Source§type ArchivedMetadata = ()
type ArchivedMetadata = ()
Source§fn pointer_metadata(
_: &<T as ArchivePointee>::ArchivedMetadata,
) -> <T as Pointee>::Metadata
fn pointer_metadata( _: &<T as ArchivePointee>::ArchivedMetadata, ) -> <T as Pointee>::Metadata
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
impl<ST, DT> CastableFrom<ST, Initialized, Initialized> for DT
impl<ST, DT> CastableFrom<ST, Uninit, Uninit> for DT
impl<T> ErasedDestructor for Twhere
T: 'static,
Source§impl<T> FmtForward for T
impl<T> FmtForward for T
Source§fn fmt_binary(self) -> FmtBinary<Self>where
Self: Binary,
fn fmt_binary(self) -> FmtBinary<Self>where
Self: Binary,
self to use its Binary implementation when Debug-formatted.Source§fn fmt_display(self) -> FmtDisplay<Self>where
Self: Display,
fn fmt_display(self) -> FmtDisplay<Self>where
Self: Display,
self to use its Display implementation when
Debug-formatted.Source§fn fmt_lower_exp(self) -> FmtLowerExp<Self>where
Self: LowerExp,
fn fmt_lower_exp(self) -> FmtLowerExp<Self>where
Self: LowerExp,
self to use its LowerExp implementation when
Debug-formatted.Source§fn fmt_lower_hex(self) -> FmtLowerHex<Self>where
Self: LowerHex,
fn fmt_lower_hex(self) -> FmtLowerHex<Self>where
Self: LowerHex,
self to use its LowerHex implementation when
Debug-formatted.Source§fn fmt_octal(self) -> FmtOctal<Self>where
Self: Octal,
fn fmt_octal(self) -> FmtOctal<Self>where
Self: Octal,
self to use its Octal implementation when Debug-formatted.Source§fn fmt_pointer(self) -> FmtPointer<Self>where
Self: Pointer,
fn fmt_pointer(self) -> FmtPointer<Self>where
Self: Pointer,
self to use its Pointer implementation when
Debug-formatted.Source§fn fmt_upper_exp(self) -> FmtUpperExp<Self>where
Self: UpperExp,
fn fmt_upper_exp(self) -> FmtUpperExp<Self>where
Self: UpperExp,
self to use its UpperExp implementation when
Debug-formatted.Source§fn fmt_upper_hex(self) -> FmtUpperHex<Self>where
Self: UpperHex,
fn fmt_upper_hex(self) -> FmtUpperHex<Self>where
Self: UpperHex,
self to use its UpperHex implementation when
Debug-formatted.Source§impl<T> Instrument for T
impl<T> Instrument for T
Source§fn instrument(self, span: Span) -> Instrumented<Self> ⓘ
fn instrument(self, span: Span) -> Instrumented<Self> ⓘ
Source§fn in_current_span(self) -> Instrumented<Self> ⓘ
fn in_current_span(self) -> Instrumented<Self> ⓘ
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self> ⓘ
fn into_either(self, into_left: bool) -> Either<Self, Self> ⓘ
self into a Left variant of Either<Self, Self>
if into_left is true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self> ⓘ
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self> ⓘ
self into a Left variant of Either<Self, Self>
if into_left(&self) returns true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§impl<T> IntoRequest<T> for T
impl<T> IntoRequest<T> for T
Source§fn into_request(self) -> Request<T>
fn into_request(self) -> Request<T>
T in a tonic::RequestSource§impl<T> LayoutRaw for T
impl<T> LayoutRaw for T
Source§fn layout_raw(_: <T as Pointee>::Metadata) -> Result<Layout, LayoutError>
fn layout_raw(_: <T as Pointee>::Metadata) -> Result<Layout, LayoutError>
Source§impl<T, N1, N2> Niching<NichedOption<T, N1>> for N2
impl<T, N1, N2> Niching<NichedOption<T, N1>> for N2
Source§unsafe fn is_niched(niched: *const NichedOption<T, N1>) -> bool
unsafe fn is_niched(niched: *const NichedOption<T, N1>) -> bool
Source§fn resolve_niched(out: Place<NichedOption<T, N1>>)
fn resolve_niched(out: Place<NichedOption<T, N1>>)
out indicating that a T is niched.Source§impl<T> Pipe for Twhere
T: ?Sized,
impl<T> Pipe for Twhere
T: ?Sized,
Source§fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> Rwhere
Self: Sized,
fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> Rwhere
Self: Sized,
Source§fn pipe_ref<'a, R>(&'a self, func: impl FnOnce(&'a Self) -> R) -> Rwhere
R: 'a,
fn pipe_ref<'a, R>(&'a self, func: impl FnOnce(&'a Self) -> R) -> Rwhere
R: 'a,
self and passes that borrow into the pipe function. Read moreSource§fn pipe_ref_mut<'a, R>(&'a mut self, func: impl FnOnce(&'a mut Self) -> R) -> Rwhere
R: 'a,
fn pipe_ref_mut<'a, R>(&'a mut self, func: impl FnOnce(&'a mut Self) -> R) -> Rwhere
R: 'a,
self and passes that borrow into the pipe function. Read moreSource§fn pipe_borrow<'a, B, R>(&'a self, func: impl FnOnce(&'a B) -> R) -> R
fn pipe_borrow<'a, B, R>(&'a self, func: impl FnOnce(&'a B) -> R) -> R
Source§fn pipe_borrow_mut<'a, B, R>(
&'a mut self,
func: impl FnOnce(&'a mut B) -> R,
) -> R
fn pipe_borrow_mut<'a, B, R>( &'a mut self, func: impl FnOnce(&'a mut B) -> R, ) -> R
Source§fn pipe_as_ref<'a, U, R>(&'a self, func: impl FnOnce(&'a U) -> R) -> R
fn pipe_as_ref<'a, U, R>(&'a self, func: impl FnOnce(&'a U) -> R) -> R
self, then passes self.as_ref() into the pipe function.Source§fn pipe_as_mut<'a, U, R>(&'a mut self, func: impl FnOnce(&'a mut U) -> R) -> R
fn pipe_as_mut<'a, U, R>(&'a mut self, func: impl FnOnce(&'a mut U) -> R) -> R
self, then passes self.as_mut() into the pipe
function.Source§fn pipe_deref<'a, T, R>(&'a self, func: impl FnOnce(&'a T) -> R) -> R
fn pipe_deref<'a, T, R>(&'a self, func: impl FnOnce(&'a T) -> R) -> R
self, then passes self.deref() into the pipe function.Source§impl<T> Pointable for T
impl<T> Pointable for T
Source§impl<T> PolicyExt for Twhere
T: ?Sized,
impl<T> PolicyExt for Twhere
T: ?Sized,
impl<T> Read<Exclusive, BecauseExclusive> for Twhere
T: ?Sized,
Source§impl<T> Tap for T
impl<T> Tap for T
Source§fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Self
fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Self
Borrow<B> of a value. Read moreSource§fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Self
fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Self
BorrowMut<B> of a value. Read moreSource§fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Self
fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Self
AsRef<R> view of a value. Read moreSource§fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Self
fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Self
AsMut<R> view of a value. Read moreSource§fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Self
fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Self
Deref::Target of a value. Read moreSource§fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Self
fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Self
Deref::Target of a value. Read moreSource§fn tap_dbg(self, func: impl FnOnce(&Self)) -> Self
fn tap_dbg(self, func: impl FnOnce(&Self)) -> Self
.tap() only in debug builds, and is erased in release builds.Source§fn tap_mut_dbg(self, func: impl FnOnce(&mut Self)) -> Self
fn tap_mut_dbg(self, func: impl FnOnce(&mut Self)) -> Self
.tap_mut() only in debug builds, and is erased in release
builds.Source§fn tap_borrow_dbg<B>(self, func: impl FnOnce(&B)) -> Self
fn tap_borrow_dbg<B>(self, func: impl FnOnce(&B)) -> Self
.tap_borrow() only in debug builds, and is erased in release
builds.Source§fn tap_borrow_mut_dbg<B>(self, func: impl FnOnce(&mut B)) -> Self
fn tap_borrow_mut_dbg<B>(self, func: impl FnOnce(&mut B)) -> Self
.tap_borrow_mut() only in debug builds, and is erased in release
builds.Source§fn tap_ref_dbg<R>(self, func: impl FnOnce(&R)) -> Self
fn tap_ref_dbg<R>(self, func: impl FnOnce(&R)) -> Self
.tap_ref() only in debug builds, and is erased in release
builds.Source§fn tap_ref_mut_dbg<R>(self, func: impl FnOnce(&mut R)) -> Self
fn tap_ref_mut_dbg<R>(self, func: impl FnOnce(&mut R)) -> Self
.tap_ref_mut() only in debug builds, and is erased in release
builds.Source§fn tap_deref_dbg<T>(self, func: impl FnOnce(&T)) -> Self
fn tap_deref_dbg<T>(self, func: impl FnOnce(&T)) -> Self
.tap_deref() only in debug builds, and is erased in release
builds.