Skip to main content

UserProfileMemory

Trait UserProfileMemory 

Source
pub trait UserProfileMemory: Send + Sync {
    // Required methods
    fn get_preferences<'life0, 'life1, 'async_trait>(
        &'life0 self,
        user_id: &'life1 str,
    ) -> Pin<Box<dyn Future<Output = Result<HashMap<String, String>, StoreError>> + Send + 'async_trait>>
       where Self: 'async_trait,
             'life0: 'async_trait,
             'life1: 'async_trait;
    fn set_preference<'life0, 'life1, 'life2, 'life3, 'async_trait>(
        &'life0 self,
        user_id: &'life1 str,
        key: &'life2 str,
        value: &'life3 str,
    ) -> Pin<Box<dyn Future<Output = Result<(), StoreError>> + Send + 'async_trait>>
       where Self: 'async_trait,
             'life0: 'async_trait,
             'life1: 'async_trait,
             'life2: 'async_trait,
             'life3: 'async_trait;
    fn remove_preference<'life0, 'life1, 'life2, 'async_trait>(
        &'life0 self,
        user_id: &'life1 str,
        key: &'life2 str,
    ) -> Pin<Box<dyn Future<Output = Result<(), StoreError>> + Send + 'async_trait>>
       where Self: 'async_trait,
             'life0: 'async_trait,
             'life1: 'async_trait,
             'life2: 'async_trait;
}
Expand description

Per-user profile / preference memory.

Stores key-value preference pairs keyed by (user_id, key). This layer is designed for stable, low-volume data that persists across sessions: language preferences, notification settings, display name, etc.

§Typical backends

  • SQLite user_prefs table.
  • Redis hash per user (HSET / HGETALL / HDEL).
  • Embedded key-value store (e.g. RocksDB, Sled).

§Examples

use xz_memory_engine::layered::traits::UserProfileMemory;
use xz_memory_core::StoreError;

async fn example(store: &dyn UserProfileMemory) -> Result<(), StoreError> {
    store.set_preference("user-42", "language", "zh-CN").await?;
    store.set_preference("user-42", "theme", "dark").await?;
    let prefs = store.get_preferences("user-42").await?;
    assert!(prefs.contains_key("language"));
    store.remove_preference("user-42", "theme").await?;
    Ok(())
}

Required Methods§

Source

fn get_preferences<'life0, 'life1, 'async_trait>( &'life0 self, user_id: &'life1 str, ) -> Pin<Box<dyn Future<Output = Result<HashMap<String, String>, StoreError>> + Send + 'async_trait>>
where Self: 'async_trait, 'life0: 'async_trait, 'life1: 'async_trait,

Retrieve all preferences for a user as a flat key-value map.

Source

fn set_preference<'life0, 'life1, 'life2, 'life3, 'async_trait>( &'life0 self, user_id: &'life1 str, key: &'life2 str, value: &'life3 str, ) -> Pin<Box<dyn Future<Output = Result<(), StoreError>> + Send + 'async_trait>>
where Self: 'async_trait, 'life0: 'async_trait, 'life1: 'async_trait, 'life2: 'async_trait, 'life3: 'async_trait,

Set or update a single preference key.

If the key already exists its value is overwritten.

Source

fn remove_preference<'life0, 'life1, 'life2, 'async_trait>( &'life0 self, user_id: &'life1 str, key: &'life2 str, ) -> Pin<Box<dyn Future<Output = Result<(), StoreError>> + Send + 'async_trait>>
where Self: 'async_trait, 'life0: 'async_trait, 'life1: 'async_trait, 'life2: 'async_trait,

Remove a single preference key.

Removing a non-existent key should succeed silently (no error).

Dyn Compatibility§

This trait is dyn compatible.

In older versions of Rust, dyn compatibility was called "object safety".

Implementors§