Skip to main content

RedbStorage

Struct RedbStorage 

Source
pub struct RedbStorage { /* private fields */ }
Expand description

redb storage backend for fast caching

Implementations§

Source§

impl RedbStorage

Source

pub async fn store_embedding_raw( &self, id: &str, embedding: &[f32], ) -> Result<()>

Store an embedding vector (internal method)

Source

pub async fn get_embedding_raw(&self, id: &str) -> Result<Option<Vec<f32>>>

Retrieve an embedding vector (internal method)

Source§

impl RedbStorage

Source

pub async fn store_embedding_impl( &self, id: &str, embedding: Vec<f32>, ) -> Result<()>

Store embedding implementation

Source

pub async fn get_embedding_impl(&self, id: &str) -> Result<Option<Vec<f32>>>

Retrieve embedding implementation

Source

pub async fn delete_embedding_impl(&self, id: &str) -> Result<bool>

Delete embedding implementation

Source

pub async fn store_embeddings_batch_impl( &self, embeddings: Vec<(String, Vec<f32>)>, ) -> Result<()>

Store multiple embeddings in batch implementation

Source

pub async fn get_embeddings_batch_impl( &self, ids: &[String], ) -> Result<Vec<Option<Vec<f32>>>>

Get multiple embeddings in batch implementation

Source§

impl RedbStorage

Source

pub async fn store_episode(&self, episode: &Episode) -> Result<()>

Store an episode in cache

Source

pub async fn get_episode(&self, episode_id: Uuid) -> Result<Option<Episode>>

Retrieve an episode from cache

Source

pub async fn get_all_episodes(&self, query: &RedbQuery) -> Result<Vec<Episode>>

Get all episodes from cache (with optional limit)

Source

pub async fn delete_episode(&self, episode_id: Uuid) -> Result<()>

Delete an episode from cache

Source§

impl RedbStorage

Source

pub async fn query_episodes_since( &self, since: DateTime<Utc>, limit: Option<usize>, ) -> Result<Vec<Episode>>

Query episodes modified since a given timestamp

Returns all episodes where start_time >= the given timestamp. This is used for incremental synchronization.

Note: This scans all episodes in the cache and filters by timestamp, which may be slow for large datasets. Consider using Turso for efficient timestamp-based queries.

§Arguments
  • since - Timestamp to query from
  • limit - Maximum number of episodes to return (default: 100, max: 1000)
Source

pub async fn query_episodes_by_metadata( &self, key: &str, value: &str, limit: Option<usize>, ) -> Result<Vec<Episode>>

Query episodes by metadata key-value pair

This method searches through all episodes and returns those whose metadata contains the specified key-value pair. This is less efficient than timestamp-based queries but necessary for metadata-based searches.

§Arguments
  • key - Metadata key to search for
  • value - Metadata value to match
  • limit - Maximum number of episodes to return (default: 100, max: 1000)
§Returns

Vector of episodes matching the metadata criteria

Source§

impl RedbStorage

Source

pub async fn store_metadata(&self, key: &str, value: &str) -> Result<()>

Store metadata value

Source

pub async fn get_metadata(&self, key: &str) -> Result<Option<String>>

Retrieve metadata value

Source

pub async fn store_episode_summary( &self, summary: &EpisodeSummary, ) -> Result<()>

Store an episode summary.

Stores a semantic summary of an episode for efficient retrieval. Uses postcard serialization for compact storage.

§Arguments
  • summary - The episode summary to store
§Returns

Ok(()) on success, error otherwise.

§Examples
let summary = EpisodeSummary {
    episode_id: Uuid::new_v4(),
    summary_text: "Task completed successfully".to_string(),
    key_concepts: vec!["rust".to_string(), "testing".to_string()],
    key_steps: vec!["Step 1: Initialize".to_string()],
    summary_embedding: None,
    created_at: Utc::now(),
};

storage.store_episode_summary(&summary).await?;
Source

pub async fn get_episode_summary( &self, episode_id: Uuid, ) -> Result<Option<EpisodeSummary>>

Retrieve an episode summary.

§Arguments
  • episode_id - ID of the episode whose summary to retrieve
§Returns

The episode summary if found, None otherwise.

§Examples
let episode_id = Uuid::new_v4();
if let Some(summary) = storage.get_episode_summary(episode_id).await? {
    println!("Summary: {}", summary.summary_text);
}
Source

pub async fn store_episode_with_capacity( &self, episode: &Episode, summary: Option<&EpisodeSummary>, capacity_manager: &CapacityManager, ) -> Result<Option<Vec<Uuid>>>

Store an episode with capacity enforcement.

This method enforces capacity limits by evicting low-relevance episodes when storage is full. The eviction and insertion happen atomically in a single write transaction to ensure consistency.

§Arguments
  • episode - The episode to store
  • summary - Optional episode summary to store alongside
  • capacity_manager - Manager that determines eviction policy
§Returns

Ok(Some(evicted_ids)) if episodes were evicted, Ok(None) if no eviction needed.

§Examples
let capacity_mgr = CapacityManager::new(100, EvictionPolicy::RelevanceWeighted);
let episode = Episode::new(
    "Test task".to_string(),
    TaskContext::default(),
    TaskType::Testing,
);

let evicted = storage.store_episode_with_capacity(&episode, None, &capacity_mgr).await?;
if let Some(evicted_ids) = evicted {
    println!("Evicted {} episodes", evicted_ids.len());
}
Source§

impl RedbStorage

Source

pub async fn store_heuristic(&self, heuristic: &Heuristic) -> Result<()>

Store a heuristic in cache

Source

pub async fn get_heuristic( &self, heuristic_id: Uuid, ) -> Result<Option<Heuristic>>

Retrieve a heuristic from cache

Source

pub async fn get_all_heuristics( &self, query: &RedbQuery, ) -> Result<Vec<Heuristic>>

Get all heuristics from cache (with optional limit)

Source§

impl RedbStorage

Source

pub async fn store_pattern(&self, pattern: &Pattern) -> Result<()>

Store a pattern in cache

Source

pub async fn get_pattern( &self, pattern_id: PatternId, ) -> Result<Option<Pattern>>

Retrieve a pattern from cache

Source

pub async fn get_all_patterns(&self, query: &RedbQuery) -> Result<Vec<Pattern>>

Get all patterns from cache (with optional limit)

Source§

impl RedbStorage

Source§

impl RedbStorage

Source

pub async fn store_relationship( &self, relationship: &EpisodeRelationship, ) -> Result<()>

Store a relationship (StorageBackend trait)

Source

pub async fn remove_relationship(&self, relationship_id: Uuid) -> Result<()>

Remove a relationship (StorageBackend trait)

Source

pub async fn get_relationships( &self, episode_id: Uuid, direction: Direction, ) -> Result<Vec<EpisodeRelationship>>

Get relationships (StorageBackend trait)

Source

pub async fn relationship_exists( &self, from_episode_id: Uuid, to_episode_id: Uuid, relationship_type: RelationshipType, ) -> Result<bool>

Check if relationship exists (StorageBackend trait)

Source

pub fn cache_relationship( &self, relationship: &EpisodeRelationship, ) -> Result<()>

Cache a relationship

Source

pub fn get_cached_relationship( &self, relationship_id: Uuid, ) -> Result<Option<EpisodeRelationship>>

Get a cached relationship by ID

Source

pub fn remove_cached_relationship(&self, relationship_id: Uuid) -> Result<()>

Remove a relationship from cache

Source

pub fn get_cached_relationships( &self, episode_id: Uuid, direction: Direction, ) -> Result<Vec<EpisodeRelationship>>

Get all cached relationships for an episode

Source

pub fn clear_relationships_cache(&self) -> Result<()>

Clear all cached relationships

Source

pub fn count_cached_relationships(&self) -> Result<usize>

Get count of cached relationships

Source§

impl RedbStorage

Source

pub async fn clear_all(&self) -> Result<()>

Clear all cached data (use with caution!)

Source§

impl RedbStorage

Source

pub async fn get_statistics(&self) -> Result<StorageStatistics>

Get database statistics

Source

pub async fn health_check(&self) -> Result<bool>

Health check - verify database accessibility

Source

pub async fn get_cache_metrics(&self) -> CacheMetrics

Get cache metrics

Returns current cache performance metrics including hit rate, miss rate, eviction count, and size statistics.

§Example
let metrics = storage.get_cache_metrics().await;
println!("Cache hit rate: {:.2}%", metrics.hit_rate * 100.0);
println!("Cache size: {} items, {} bytes", metrics.item_count, metrics.total_size_bytes);
Source

pub async fn cleanup_cache(&self) -> usize

Manually trigger cache cleanup to remove expired entries

Returns the number of expired entries removed.

This is useful for testing or when you want to force cleanup without waiting for the background task.

Source§

impl RedbStorage

Source

pub async fn new(path: &Path) -> Result<Self>

Create a new redb storage instance with default adaptive cache

Uses AdaptiveCacheAdapter by default for intelligent TTL adjustment.

§Arguments
  • path - Path to the redb database file
§Example
let storage = RedbStorage::new(Path::new("./memory.redb")).await?;
Source

pub async fn new_with_cache_config( path: &Path, cache_config: CacheConfig, ) -> Result<Self>

Create a new redb storage instance with custom cache configuration

Uses the legacy LRUCache implementation. For adaptive TTL features, use new_with_adaptive_config instead.

§Arguments
  • path - Path to the redb database file
  • cache_config - Cache configuration settings
§Example
let config = CacheConfig {
    max_size: 500,
    default_ttl_secs: 1800,
    cleanup_interval_secs: 600,
    enable_background_cleanup: true,
};
let storage = RedbStorage::new_with_cache_config(Path::new("./memory.redb"), config).await?;
Source

pub async fn new_with_adaptive_config( path: &Path, config: AdaptiveCacheConfig, ) -> Result<Self>

Create a new redb storage instance with adaptive cache configuration

Uses AdaptiveCacheAdapter for intelligent TTL adjustment based on access patterns. Frequently accessed items get longer TTL, rarely accessed items get shorter TTL.

§Arguments
  • path - Path to the redb database file
  • config - Adaptive cache configuration settings
§Example
let config = AdaptiveCacheConfig {
    max_size: 1000,
    default_ttl: Duration::from_secs(1800),
    min_ttl: Duration::from_secs(300),
    max_ttl: Duration::from_secs(7200),
    ..Default::default()
};
let storage = RedbStorage::new_with_adaptive_config(Path::new("./memory.redb"), config).await?;

Trait Implementations§

Source§

impl EmbeddingStorageBackend for RedbStorage

Source§

fn store_episode_embedding<'life0, 'async_trait>( &'life0 self, episode_id: Uuid, embedding: Vec<f32>, ) -> Pin<Box<dyn Future<Output = Result<()>> + Send + 'async_trait>>
where Self: 'async_trait, 'life0: 'async_trait,

Store an episode embedding
Source§

fn store_pattern_embedding<'life0, 'async_trait>( &'life0 self, pattern_id: PatternId, embedding: Vec<f32>, ) -> Pin<Box<dyn Future<Output = Result<()>> + Send + 'async_trait>>
where Self: 'async_trait, 'life0: 'async_trait,

Store a pattern embedding
Source§

fn get_episode_embedding<'life0, 'async_trait>( &'life0 self, episode_id: Uuid, ) -> Pin<Box<dyn Future<Output = Result<Option<Vec<f32>>>> + Send + 'async_trait>>
where Self: 'async_trait, 'life0: 'async_trait,

Get an episode embedding
Source§

fn get_pattern_embedding<'life0, 'async_trait>( &'life0 self, pattern_id: PatternId, ) -> Pin<Box<dyn Future<Output = Result<Option<Vec<f32>>>> + Send + 'async_trait>>
where Self: 'async_trait, 'life0: 'async_trait,

Get a pattern embedding
Source§

fn find_similar_episodes<'life0, 'async_trait>( &'life0 self, query_embedding: Vec<f32>, limit: usize, threshold: f32, ) -> Pin<Box<dyn Future<Output = Result<Vec<SimilaritySearchResult<Episode>>>> + Send + 'async_trait>>
where Self: 'async_trait, 'life0: 'async_trait,

Find similar episodes using vector similarity
Source§

fn find_similar_patterns<'life0, 'async_trait>( &'life0 self, query_embedding: Vec<f32>, limit: usize, threshold: f32, ) -> Pin<Box<dyn Future<Output = Result<Vec<SimilaritySearchResult<Pattern>>>> + Send + 'async_trait>>
where Self: 'async_trait, 'life0: 'async_trait,

Find similar patterns using vector similarity
Source§

impl StorageBackend for RedbStorage

Source§

fn store_episode<'life0, 'life1, 'async_trait>( &'life0 self, episode: &'life1 Episode, ) -> Pin<Box<dyn Future<Output = Result<()>> + Send + 'async_trait>>
where Self: 'async_trait, 'life0: 'async_trait, 'life1: 'async_trait,

Store an episode Read more
Source§

fn get_episode<'life0, 'async_trait>( &'life0 self, id: Uuid, ) -> Pin<Box<dyn Future<Output = Result<Option<Episode>>> + Send + 'async_trait>>
where Self: 'async_trait, 'life0: 'async_trait,

Retrieve an episode by ID Read more
Source§

fn delete_episode<'life0, 'async_trait>( &'life0 self, id: Uuid, ) -> Pin<Box<dyn Future<Output = Result<()>> + Send + 'async_trait>>
where Self: 'async_trait, 'life0: 'async_trait,

Delete an episode by ID Read more
Source§

fn store_pattern<'life0, 'life1, 'async_trait>( &'life0 self, pattern: &'life1 Pattern, ) -> Pin<Box<dyn Future<Output = Result<()>> + Send + 'async_trait>>
where Self: 'async_trait, 'life0: 'async_trait, 'life1: 'async_trait,

Store a pattern Read more
Source§

fn get_pattern<'life0, 'async_trait>( &'life0 self, id: PatternId, ) -> Pin<Box<dyn Future<Output = Result<Option<Pattern>>> + Send + 'async_trait>>
where Self: 'async_trait, 'life0: 'async_trait,

Retrieve a pattern by ID Read more
Source§

fn store_heuristic<'life0, 'life1, 'async_trait>( &'life0 self, heuristic: &'life1 Heuristic, ) -> Pin<Box<dyn Future<Output = Result<()>> + Send + 'async_trait>>
where Self: 'async_trait, 'life0: 'async_trait, 'life1: 'async_trait,

Store a heuristic Read more
Source§

fn get_heuristic<'life0, 'async_trait>( &'life0 self, id: Uuid, ) -> Pin<Box<dyn Future<Output = Result<Option<Heuristic>>> + Send + 'async_trait>>
where Self: 'async_trait, 'life0: 'async_trait,

Retrieve a heuristic by ID Read more
Source§

fn query_episodes_since<'life0, 'async_trait>( &'life0 self, since: DateTime<Utc>, limit: Option<usize>, ) -> Pin<Box<dyn Future<Output = Result<Vec<Episode>>> + Send + 'async_trait>>
where Self: 'async_trait, 'life0: 'async_trait,

Query episodes modified since a given timestamp Read more
Source§

fn query_episodes_by_metadata<'life0, 'life1, 'life2, 'async_trait>( &'life0 self, key: &'life1 str, value: &'life2 str, limit: Option<usize>, ) -> Pin<Box<dyn Future<Output = Result<Vec<Episode>>> + Send + 'async_trait>>
where Self: 'async_trait, 'life0: 'async_trait, 'life1: 'async_trait, 'life2: 'async_trait,

Query episodes by metadata key-value pair Read more
Source§

fn store_embedding<'life0, 'life1, 'async_trait>( &'life0 self, id: &'life1 str, embedding: Vec<f32>, ) -> Pin<Box<dyn Future<Output = Result<()>> + Send + 'async_trait>>
where Self: 'async_trait, 'life0: 'async_trait, 'life1: 'async_trait,

Store embedding for an episode or pattern Read more
Source§

fn get_embedding<'life0, 'life1, 'async_trait>( &'life0 self, id: &'life1 str, ) -> Pin<Box<dyn Future<Output = Result<Option<Vec<f32>>>> + Send + 'async_trait>>
where Self: 'async_trait, 'life0: 'async_trait, 'life1: 'async_trait,

Retrieve embedding by ID Read more
Source§

fn delete_embedding<'life0, 'life1, 'async_trait>( &'life0 self, id: &'life1 str, ) -> Pin<Box<dyn Future<Output = Result<bool>> + Send + 'async_trait>>
where Self: 'async_trait, 'life0: 'async_trait, 'life1: 'async_trait,

Delete embedding by ID Read more
Source§

fn store_embeddings_batch<'life0, 'async_trait>( &'life0 self, embeddings: Vec<(String, Vec<f32>)>, ) -> Pin<Box<dyn Future<Output = Result<()>> + Send + 'async_trait>>
where Self: 'async_trait, 'life0: 'async_trait,

Store multiple embeddings in batch Read more
Source§

fn get_embeddings_batch<'life0, 'life1, 'async_trait>( &'life0 self, ids: &'life1 [String], ) -> Pin<Box<dyn Future<Output = Result<Vec<Option<Vec<f32>>>>> + Send + 'async_trait>>
where Self: 'async_trait, 'life0: 'async_trait, 'life1: 'async_trait,

Get embeddings for multiple IDs Read more
Source§

fn store_relationship<'life0, 'life1, 'async_trait>( &'life0 self, relationship: &'life1 EpisodeRelationship, ) -> Pin<Box<dyn Future<Output = Result<()>> + Send + 'async_trait>>
where Self: 'async_trait, 'life0: 'async_trait, 'life1: 'async_trait,

Store a relationship between two episodes Read more
Source§

fn remove_relationship<'life0, 'async_trait>( &'life0 self, relationship_id: Uuid, ) -> Pin<Box<dyn Future<Output = Result<()>> + Send + 'async_trait>>
where Self: 'async_trait, 'life0: 'async_trait,

Remove a relationship by ID Read more
Source§

fn get_relationships<'life0, 'async_trait>( &'life0 self, episode_id: Uuid, direction: Direction, ) -> Pin<Box<dyn Future<Output = Result<Vec<EpisodeRelationship>>> + Send + 'async_trait>>
where Self: 'async_trait, 'life0: 'async_trait,

Get relationships for an episode Read more
Source§

fn relationship_exists<'life0, 'async_trait>( &'life0 self, from_episode_id: Uuid, to_episode_id: Uuid, relationship_type: RelationshipType, ) -> Pin<Box<dyn Future<Output = Result<bool>> + Send + 'async_trait>>
where Self: 'async_trait, 'life0: 'async_trait,

Check if a relationship exists Read more
Source§

fn store_recommendation_session<'life0, 'life1, 'async_trait>( &'life0 self, session: &'life1 RecommendationSession, ) -> Pin<Box<dyn Future<Output = Result<()>> + Send + 'async_trait>>
where Self: 'async_trait, 'life0: 'async_trait, 'life1: 'async_trait,

Persist a recommendation session for durability and analytics.
Source§

fn get_recommendation_session<'life0, 'async_trait>( &'life0 self, session_id: Uuid, ) -> Pin<Box<dyn Future<Output = Result<Option<RecommendationSession>>> + Send + 'async_trait>>
where Self: 'async_trait, 'life0: 'async_trait,

Retrieve a recommendation session by ID.
Source§

fn get_recommendation_session_for_episode<'life0, 'async_trait>( &'life0 self, episode_id: Uuid, ) -> Pin<Box<dyn Future<Output = Result<Option<RecommendationSession>>> + Send + 'async_trait>>
where Self: 'async_trait, 'life0: 'async_trait,

Retrieve the most recent recommendation session for an episode.
Source§

fn store_recommendation_feedback<'life0, 'life1, 'async_trait>( &'life0 self, feedback: &'life1 RecommendationFeedback, ) -> Pin<Box<dyn Future<Output = Result<()>> + Send + 'async_trait>>
where Self: 'async_trait, 'life0: 'async_trait, 'life1: 'async_trait,

Persist feedback associated with a recommendation session.
Source§

fn get_recommendation_feedback<'life0, 'async_trait>( &'life0 self, session_id: Uuid, ) -> Pin<Box<dyn Future<Output = Result<Option<RecommendationFeedback>>> + Send + 'async_trait>>
where Self: 'async_trait, 'life0: 'async_trait,

Retrieve feedback for a recommendation session.
Source§

fn get_recommendation_stats<'life0, 'async_trait>( &'life0 self, ) -> Pin<Box<dyn Future<Output = Result<RecommendationStats>> + Send + 'async_trait>>
where Self: 'async_trait, 'life0: 'async_trait,

Compute global recommendation statistics.
Source§

fn cleanup_episodes<'life0, 'life1, 'async_trait>( &'life0 self, policy: &'life1 EpisodeRetentionPolicy, ) -> Pin<Box<dyn Future<Output = Result<CleanupResult, Error>> + Send + 'async_trait>>
where 'life0: 'async_trait, 'life1: 'async_trait, Self: 'async_trait,

Clean up expired episodes based on retention policy Read more
Source§

fn count_cleanup_candidates<'life0, 'life1, 'async_trait>( &'life0 self, policy: &'life1 EpisodeRetentionPolicy, ) -> Pin<Box<dyn Future<Output = Result<usize, Error>> + Send + 'async_trait>>
where 'life0: 'async_trait, 'life1: 'async_trait, Self: 'async_trait,

Get count of episodes that would be cleaned up (dry run) 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> 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> Same for T

Source§

type Output = T

Should always be Self
Source§

impl<SS, SP> SupersetOf<SS> for SP
where SS: SubsetOf<SP>,

Source§

fn to_subset(&self) -> Option<SS>

The inverse inclusion map: attempts to construct self from the equivalent element of its superset. Read more
Source§

fn is_in_subset(&self) -> bool

Checks if self is actually part of its subset T (and can be converted to it).
Source§

fn to_subset_unchecked(&self) -> SS

Use with care! Same as self.to_subset but without any property checks. Always succeeds.
Source§

fn from_subset(element: &SS) -> SP

The inclusion map: converts self to the equivalent element of its superset.
Source§

impl<SS, SP> SupersetOf<SS> for SP
where SS: SubsetOf<SP>,

Source§

fn to_subset(&self) -> Option<SS>

The inverse inclusion map: attempts to construct self from the equivalent element of its superset. Read more
Source§

fn is_in_subset(&self) -> bool

Checks if self is actually part of its subset T (and can be converted to it).
Source§

fn to_subset_unchecked(&self) -> SS

Use with care! Same as self.to_subset but without any property checks. Always succeeds.
Source§

fn from_subset(element: &SS) -> SP

The inclusion map: converts self to the equivalent element of its superset.
Source§

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

Source§

type Error = Infallible

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

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

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

impl<T> SendAlias for T

Source§

impl<T> SendAlias for T

Source§

impl<T> SyncAlias for T

Source§

impl<T> SyncAlias for T