pub trait WritableValueSet: ValueSet {
// Required methods
fn insert_value<'life0, 'life1, 'life2, 'async_trait>(
&'life0 self,
id: &'life1 Self::Id,
record: &'life2 Record<Self::Value>,
) -> Pin<Box<dyn Future<Output = Result<Record<Self::Value>>> + Send + 'async_trait>>
where Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
'life2: 'async_trait;
fn replace_value<'life0, 'life1, 'life2, 'async_trait>(
&'life0 self,
id: &'life1 Self::Id,
record: &'life2 Record<Self::Value>,
) -> Pin<Box<dyn Future<Output = Result<Record<Self::Value>>> + Send + 'async_trait>>
where Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
'life2: 'async_trait;
fn patch_value<'life0, 'life1, 'life2, 'async_trait>(
&'life0 self,
id: &'life1 Self::Id,
partial: &'life2 Record<Self::Value>,
) -> Pin<Box<dyn Future<Output = Result<Record<Self::Value>>> + Send + 'async_trait>>
where Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
'life2: 'async_trait;
fn delete<'life0, 'life1, 'async_trait>(
&'life0 self,
id: &'life1 Self::Id,
) -> Pin<Box<dyn Future<Output = Result<()>> + Send + 'async_trait>>
where Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait;
fn delete_all<'life0, 'async_trait>(
&'life0 self,
) -> Pin<Box<dyn Future<Output = Result<()>> + Send + 'async_trait>>
where Self: 'async_trait,
'life0: 'async_trait;
}Expand description
Write operations on raw storage values with idempotent behavior.
See documentation for ValueSet for implementation example.
Required Methods§
Sourcefn insert_value<'life0, 'life1, 'life2, 'async_trait>(
&'life0 self,
id: &'life1 Self::Id,
record: &'life2 Record<Self::Value>,
) -> Pin<Box<dyn Future<Output = Result<Record<Self::Value>>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
'life2: 'async_trait,
fn insert_value<'life0, 'life1, 'life2, 'async_trait>(
&'life0 self,
id: &'life1 Self::Id,
record: &'life2 Record<Self::Value>,
) -> Pin<Box<dyn Future<Output = Result<Record<Self::Value>>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
'life2: 'async_trait,
Insert value with a specific ID (often generated) (HTTP POST with ID)
Idempotent: Succeeds if no record exists with the given ID. If record already exists, must return success without overwriting data, returning original data.
Returns: Record as it was stored.
§Use Case
Generate unique ID and store record while avoiding duplicates.
Sourcefn replace_value<'life0, 'life1, 'life2, 'async_trait>(
&'life0 self,
id: &'life1 Self::Id,
record: &'life2 Record<Self::Value>,
) -> Pin<Box<dyn Future<Output = Result<Record<Self::Value>>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
'life2: 'async_trait,
fn replace_value<'life0, 'life1, 'life2, 'async_trait>(
&'life0 self,
id: &'life1 Self::Id,
record: &'life2 Record<Self::Value>,
) -> Pin<Box<dyn Future<Output = Result<Record<Self::Value>>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
'life2: 'async_trait,
Replace the entire record at the specified ID (HTTP PUT)
Idempotent: Always succeeds, completely overwrites existing data
if present. If possible, will remove/recreate record; therefore if
record doesn’t contain certain attributes which were present in the
database, those will be removed. If record does not exist, will
create it.
Returns: Record as it was stored.
§Use Case
Replace with a new version of a record.
Sourcefn patch_value<'life0, 'life1, 'life2, 'async_trait>(
&'life0 self,
id: &'life1 Self::Id,
partial: &'life2 Record<Self::Value>,
) -> Pin<Box<dyn Future<Output = Result<Record<Self::Value>>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
'life2: 'async_trait,
fn patch_value<'life0, 'life1, 'life2, 'async_trait>(
&'life0 self,
id: &'life1 Self::Id,
partial: &'life2 Record<Self::Value>,
) -> Pin<Box<dyn Future<Output = Result<Record<Self::Value>>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
'life2: 'async_trait,
Partially update a record by merging with the provided value (HTTP PATCH)
Fails if record doesn’t exist. The exact merge behavior depends on the storage implementation - typically merges object fields for JSON-like values.
Returns: Record as it was stored (not only the partial change).
§Use Case
Update only the modified fields of a record.
Sourcefn delete<'life0, 'life1, 'async_trait>(
&'life0 self,
id: &'life1 Self::Id,
) -> Pin<Box<dyn Future<Output = Result<()>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
fn delete<'life0, 'life1, 'async_trait>(
&'life0 self,
id: &'life1 Self::Id,
) -> Pin<Box<dyn Future<Output = Result<()>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
Delete a record by ID (HTTP DELETE)
Idempotent: Always succeeds, even if the record doesn’t exist. This allows safe cleanup operations without checking existence first.
Sourcefn delete_all<'life0, 'async_trait>(
&'life0 self,
) -> Pin<Box<dyn Future<Output = Result<()>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
fn delete_all<'life0, 'async_trait>(
&'life0 self,
) -> Pin<Box<dyn Future<Output = Result<()>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
Delete all records in the set (HTTP DELETE without ID)
Idempotent: All records in the set will be deleted. Executing several times is OK.
Execute on a subset of your entire database.