Skip to main content

AgentBuilder

Struct AgentBuilder 

Source
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>

Source

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.

Source

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.

Source

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)?;
Source

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>

Source

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.

Source

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());
Source

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.

Source

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>

§

impl<S, D, P, T> Send for AgentBuilder<S, D, P, T>
where AgentStorage<S>: Send, Option<P>: Send, Vec<Arc<T>>: Send, Option<D>: Send,

§

impl<S, D, P, T> Sync for AgentBuilder<S, D, P, T>
where AgentStorage<S>: Sync, Option<P>: Sync, Vec<Arc<T>>: Sync, Option<D>: Sync,

§

impl<S, D, P, T> Unpin for AgentBuilder<S, D, P, T>
where AgentStorage<S>: Unpin, Option<P>: Unpin, Vec<Arc<T>>: Unpin, Option<D>: Unpin,

§

impl<S, D, P, T> UnsafeUnpin for AgentBuilder<S, D, P, T>

§

impl<S, D, P, T> UnwindSafe for AgentBuilder<S, D, P, T>

Blanket Implementations§

Source§

impl<T> Allocation for T
where T: RefUnwindSafe + Send + Sync,

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> ArchivePointee for T

Source§

type ArchivedMetadata = ()

The archived version of the pointer metadata for this type.
Source§

fn pointer_metadata( _: &<T as ArchivePointee>::ArchivedMetadata, ) -> <T as Pointee>::Metadata

Converts some archived metadata to the pointer metadata for itself.
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<ST, DT> CastableFrom<ST, Initialized, Initialized> for DT
where ST: ?Sized, DT: ?Sized,

Source§

impl<ST, DT> CastableFrom<ST, Uninit, Uninit> for DT
where ST: ?Sized, DT: ?Sized,

Source§

impl<T> Conv for T

Source§

fn conv<T>(self) -> T
where Self: Into<T>,

Converts self into T using Into<T>. Read more
Source§

impl<T> ErasedDestructor for T
where T: 'static,

Source§

impl<T> FmtForward for T

Source§

fn fmt_binary(self) -> FmtBinary<Self>
where Self: Binary,

Causes self to use its Binary implementation when Debug-formatted.
Source§

fn fmt_display(self) -> FmtDisplay<Self>
where Self: Display,

Causes self to use its Display implementation when Debug-formatted.
Source§

fn fmt_lower_exp(self) -> FmtLowerExp<Self>
where Self: LowerExp,

Causes self to use its LowerExp implementation when Debug-formatted.
Source§

fn fmt_lower_hex(self) -> FmtLowerHex<Self>
where Self: LowerHex,

Causes self to use its LowerHex implementation when Debug-formatted.
Source§

fn fmt_octal(self) -> FmtOctal<Self>
where Self: Octal,

Causes self to use its Octal implementation when Debug-formatted.
Source§

fn fmt_pointer(self) -> FmtPointer<Self>
where Self: Pointer,

Causes self to use its Pointer implementation when Debug-formatted.
Source§

fn fmt_upper_exp(self) -> FmtUpperExp<Self>
where Self: UpperExp,

Causes self to use its UpperExp implementation when Debug-formatted.
Source§

fn fmt_upper_hex(self) -> FmtUpperHex<Self>
where Self: UpperHex,

Causes self to use its UpperHex implementation when Debug-formatted.
Source§

fn fmt_list(self) -> FmtList<Self>
where &'a Self: for<'a> IntoIterator,

Formats each item in a sequence. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T> Instrument for T

Source§

fn instrument(self, span: Span) -> Instrumented<Self> ⓘ

Instruments this type with the provided Span, returning an Instrumented wrapper. Read more
Source§

fn in_current_span(self) -> Instrumented<Self> ⓘ

Instruments this type with the current Span, returning an Instrumented wrapper. Read more
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> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self> ⓘ

Converts 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 more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self> ⓘ
where F: FnOnce(&Self) -> bool,

Converts 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 more
Source§

impl<T> IntoRequest<T> for T

Source§

fn into_request(self) -> Request<T>

Wrap the input message T in a tonic::Request
Source§

impl<L> LayerExt<L> for L

Source§

fn named_layer<S>(&self, service: S) -> Layered<<L as Layer<S>>::Service, S>
where L: Layer<S>,

Applies the layer to a service and wraps it in Layered.
Source§

impl<T> LayoutRaw for T

Source§

fn layout_raw(_: <T as Pointee>::Metadata) -> Result<Layout, LayoutError>

Returns the layout of the type.
Source§

impl<T, N1, N2> Niching<NichedOption<T, N1>> for N2
where T: SharedNiching<N1, N2>, N1: Niching<T>, N2: Niching<T>,

Source§

unsafe fn is_niched(niched: *const NichedOption<T, N1>) -> bool

Returns whether the given value has been niched. Read more
Source§

fn resolve_niched(out: Place<NichedOption<T, N1>>)

Writes data to out indicating that a T is niched.
Source§

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

Source§

fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> R
where Self: Sized,

Pipes by value. This is generally the method you want to use. Read more
Source§

fn pipe_ref<'a, R>(&'a self, func: impl FnOnce(&'a Self) -> R) -> R
where R: 'a,

Borrows self and passes that borrow into the pipe function. Read more
Source§

fn pipe_ref_mut<'a, R>(&'a mut self, func: impl FnOnce(&'a mut Self) -> R) -> R
where R: 'a,

Mutably borrows self and passes that borrow into the pipe function. Read more
Source§

fn pipe_borrow<'a, B, R>(&'a self, func: impl FnOnce(&'a B) -> R) -> R
where Self: Borrow<B>, B: 'a + ?Sized, R: 'a,

Borrows self, then passes self.borrow() into the pipe function. Read more
Source§

fn pipe_borrow_mut<'a, B, R>( &'a mut self, func: impl FnOnce(&'a mut B) -> R, ) -> R
where Self: BorrowMut<B>, B: 'a + ?Sized, R: 'a,

Mutably borrows self, then passes self.borrow_mut() into the pipe function. Read more
Source§

fn pipe_as_ref<'a, U, R>(&'a self, func: impl FnOnce(&'a U) -> R) -> R
where Self: AsRef<U>, U: 'a + ?Sized, R: 'a,

Borrows 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
where Self: AsMut<U>, U: 'a + ?Sized, R: 'a,

Mutably borrows 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
where Self: Deref<Target = T>, T: 'a + ?Sized, R: 'a,

Borrows self, then passes self.deref() into the pipe function.
Source§

fn pipe_deref_mut<'a, T, R>( &'a mut self, func: impl FnOnce(&'a mut T) -> R, ) -> R
where Self: DerefMut<Target = T> + Deref, T: 'a + ?Sized, R: 'a,

Mutably borrows self, then passes self.deref_mut() into the pipe function.
Source§

impl<T> Pointable for T

Source§

const ALIGN: usize

The alignment of pointer.
Source§

type Init = T

The type for initializers.
Source§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
Source§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
Source§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
Source§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

impl<T> Pointee for T

Source§

type Metadata = ()

The metadata type for pointers and references to this type.
Source§

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

Source§

fn and<P, B, E>(self, other: P) -> And<T, P>
where T: Sized + Policy<B, E>, P: Policy<B, E>,

Create a new Policy that returns Action::Follow only if self and other return Action::Follow. Read more
Source§

fn or<P, B, E>(self, other: P) -> Or<T, P>
where T: Sized + Policy<B, E>, P: Policy<B, E>,

Create a new Policy that returns Action::Follow if either self or other returns Action::Follow. Read more
Source§

impl<T> Read<Exclusive, BecauseExclusive> for T
where T: ?Sized,

Source§

impl<T> Same for T

Source§

type Output = T

Should always be Self
Source§

impl<T> Tap for T

Source§

fn tap(self, func: impl FnOnce(&Self)) -> Self

Immutable access to a value. Read more
Source§

fn tap_mut(self, func: impl FnOnce(&mut Self)) -> Self

Mutable access to a value. Read more
Source§

fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Self
where Self: Borrow<B>, B: ?Sized,

Immutable access to the Borrow<B> of a value. Read more
Source§

fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Self
where Self: BorrowMut<B>, B: ?Sized,

Mutable access to the BorrowMut<B> of a value. Read more
Source§

fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Self
where Self: AsRef<R>, R: ?Sized,

Immutable access to the AsRef<R> view of a value. Read more
Source§

fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Self
where Self: AsMut<R>, R: ?Sized,

Mutable access to the AsMut<R> view of a value. Read more
Source§

fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Self
where Self: Deref<Target = T>, T: ?Sized,

Immutable access to the Deref::Target of a value. Read more
Source§

fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Self
where Self: DerefMut<Target = T> + Deref, T: ?Sized,

Mutable access to the Deref::Target of a value. Read more
Source§

fn tap_dbg(self, func: impl FnOnce(&Self)) -> Self

Calls .tap() only in debug builds, and is erased in release builds.
Source§

fn tap_mut_dbg(self, func: impl FnOnce(&mut Self)) -> Self

Calls .tap_mut() only in debug builds, and is erased in release builds.
Source§

fn tap_borrow_dbg<B>(self, func: impl FnOnce(&B)) -> Self
where Self: Borrow<B>, B: ?Sized,

Calls .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
where Self: BorrowMut<B>, B: ?Sized,

Calls .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
where Self: AsRef<R>, R: ?Sized,

Calls .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
where Self: AsMut<R>, R: ?Sized,

Calls .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
where Self: Deref<Target = T>, T: ?Sized,

Calls .tap_deref() only in debug builds, and is erased in release builds.
Source§

fn tap_deref_mut_dbg<T>(self, func: impl FnOnce(&mut T)) -> Self
where Self: DerefMut<Target = T> + Deref, T: ?Sized,

Calls .tap_deref_mut() only in debug builds, and is erased in release builds.
Source§

impl<T> TryConv for T

Source§

fn try_conv<T>(self) -> Result<T, Self::Error>
where Self: TryInto<T>,

Attempts to convert self into T using TryInto<T>. 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.
Source§

impl<V, T> VZip<V> for T
where V: MultiLane<T>,

Source§

fn vzip(self) -> V

Source§

impl<T> WithSubscriber for T

Source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self> ⓘ
where S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a WithDispatch wrapper. Read more
Source§

fn with_current_subscriber(self) -> WithDispatch<Self> ⓘ

Attaches the current default Subscriber to this type, returning a WithDispatch wrapper. Read more