Module storage

Source
Expand description

Storage abstraction layer for SCIM resources.

This module provides a clean separation between storage concerns and SCIM protocol logic. The StorageProvider trait defines pure data storage operations that are protocol-agnostic, allowing for pluggable storage backends while keeping SCIM-specific logic in the provider layer.

§Architecture

The storage layer is responsible for:

  • Pure PUT/GET/DELETE operations on JSON data
  • Tenant isolation and data organization
  • Basic querying and filtering
  • Data persistence and retrieval

The storage layer is NOT responsible for:

  • SCIM metadata generation (timestamps, versions, etc.)
  • SCIM validation rules
  • Business logic (limits, permissions, etc.)
  • Protocol-specific transformations

§Design Philosophy

This interface follows the principle that at the storage level, CREATE and UPDATE are the same operation - you’re just putting data at a location. The distinction between “create” vs “update” is business logic that belongs in the SCIM provider layer.

§Example Usage

use scim_server::storage::{StorageProvider, StorageKey, InMemoryStorage};
use serde_json::json;

let storage = InMemoryStorage::new();

// Put a resource (works for both create and update)
let key = StorageKey::new("tenant1", "User", "123");
let user_data = json!({
    "id": "123",
    "userName": "john.doe",
    "displayName": "John Doe"
});
let stored_data = storage.put(key.clone(), user_data).await?;

// Get the resource
let retrieved = storage.get(key.clone()).await?;
assert!(retrieved.is_some());

// Delete the resource
let was_deleted = storage.delete(key).await?;
assert!(was_deleted);

Re-exports§

pub use errors::StorageError;
pub use in_memory::InMemoryStorage;
pub use in_memory::InMemoryStorageStats;

Modules§

errors
Storage-specific error types for pure data operations.
in_memory
In-memory storage implementation for SCIM resources.

Structs§

StorageKey
A hierarchical key for identifying resources in storage.
StoragePrefix
A prefix for querying resources by tenant and type.

Traits§

StorageProvider
Core trait for storage providers that handle pure data persistence operations.