pub trait BackboneHttpHandler<T>: Send + Sync {
// Required methods
fn list(&self, request: ListRequest) -> Result<ApiResponse<Vec<T>>>;
fn create(&self, request: T) -> Result<ApiResponse<T>>;
fn get_by_id(&self, id: &Uuid) -> Result<ApiResponse<T>>;
fn update(&self, id: &Uuid, request: T) -> Result<ApiResponse<T>>;
fn partial_update(
&self,
id: &Uuid,
fields: HashMap<String, Value>,
) -> Result<ApiResponse<T>>;
fn soft_delete(&self, id: &Uuid) -> Result<ApiResponse<()>>;
fn bulk_create(
&self,
request: BulkCreateRequest<T>,
) -> Result<ApiResponse<BulkResponse<T>>>;
fn upsert(&self, request: UpsertRequest<T>) -> Result<ApiResponse<T>>;
fn list_deleted(&self, request: ListRequest) -> Result<ApiResponse<Vec<T>>>;
fn restore(&self, id: &Uuid) -> Result<ApiResponse<T>>;
fn empty_trash(&self) -> Result<ApiResponse<()>>;
fn get_deleted_by_id(&self, id: &Uuid) -> Result<ApiResponse<T>>;
}Expand description
Synchronous trait for HTTP handlers implementing Backbone CRUD operations.
This trait provides a synchronous interface for services that need to implement
the 11 standard Backbone CRUD endpoints. Unlike CrudService which is async,
this trait is designed for simpler use cases where async is not required.
§Type Parameters
T: The entity type
§Example
ⓘ
impl BackboneHttpHandler<User> for UserService {
fn list(&self, request: ListRequest) -> Result<ApiResponse<Vec<User>>> {
let users = self.users.lock().unwrap();
let filtered = users.iter().filter(|u| !u.is_deleted()).cloned().collect();
Ok(ApiResponse::success(filtered, Some("Users listed".to_string())))
}
// ... implement other methods
}Required Methods§
Sourcefn list(&self, request: ListRequest) -> Result<ApiResponse<Vec<T>>>
fn list(&self, request: ListRequest) -> Result<ApiResponse<Vec<T>>>
- List entities with pagination and filtering
Sourcefn create(&self, request: T) -> Result<ApiResponse<T>>
fn create(&self, request: T) -> Result<ApiResponse<T>>
- Create a new entity
Sourcefn get_by_id(&self, id: &Uuid) -> Result<ApiResponse<T>>
fn get_by_id(&self, id: &Uuid) -> Result<ApiResponse<T>>
- Get entity by ID
Sourcefn update(&self, id: &Uuid, request: T) -> Result<ApiResponse<T>>
fn update(&self, id: &Uuid, request: T) -> Result<ApiResponse<T>>
- Full update of entity
Sourcefn partial_update(
&self,
id: &Uuid,
fields: HashMap<String, Value>,
) -> Result<ApiResponse<T>>
fn partial_update( &self, id: &Uuid, fields: HashMap<String, Value>, ) -> Result<ApiResponse<T>>
- Partial update with specific fields
Sourcefn soft_delete(&self, id: &Uuid) -> Result<ApiResponse<()>>
fn soft_delete(&self, id: &Uuid) -> Result<ApiResponse<()>>
- Soft delete entity
Sourcefn bulk_create(
&self,
request: BulkCreateRequest<T>,
) -> Result<ApiResponse<BulkResponse<T>>>
fn bulk_create( &self, request: BulkCreateRequest<T>, ) -> Result<ApiResponse<BulkResponse<T>>>
- Bulk create multiple entities
Sourcefn upsert(&self, request: UpsertRequest<T>) -> Result<ApiResponse<T>>
fn upsert(&self, request: UpsertRequest<T>) -> Result<ApiResponse<T>>
- Upsert (create or update)
Sourcefn list_deleted(&self, request: ListRequest) -> Result<ApiResponse<Vec<T>>>
fn list_deleted(&self, request: ListRequest) -> Result<ApiResponse<Vec<T>>>
- List deleted entities (trash)
Sourcefn restore(&self, id: &Uuid) -> Result<ApiResponse<T>>
fn restore(&self, id: &Uuid) -> Result<ApiResponse<T>>
- Restore soft-deleted entity
Sourcefn empty_trash(&self) -> Result<ApiResponse<()>>
fn empty_trash(&self) -> Result<ApiResponse<()>>
- Permanently delete all soft-deleted entities
Sourcefn get_deleted_by_id(&self, id: &Uuid) -> Result<ApiResponse<T>>
fn get_deleted_by_id(&self, id: &Uuid) -> Result<ApiResponse<T>>
- Get deleted entity by ID (from trash)
Dyn Compatibility§
This trait is dyn compatible.
In older versions of Rust, dyn compatibility was called "object safety".