pub struct TransactUpdateRequest<TD: TableDefinition, T = (), C: ConditionState = NoCondition> { /* private fields */ }Expand description
Builder for an Update operation inside a DynamoDB transaction.
Constructed via DynamoDBItemTransactOp::transact_update or
DynamoDBItemTransactOp::transact_update_by_id. Optionally add a
condition that must hold for the update to succeed, via
.condition(),
.exists(), or
.not_exists(). DynamoDB accepts a
single condition expression per operation, so this can only be called once.
Call .build() to produce a
TransactWriteItem that can be passed to the SDK’s
transact_write_items() builder.
§Examples
Atomically promote a user to instructor and create their first enrollment:
use dynamodb_facade::{Condition, DynamoDBItemTransactOp, KeyId, Update};
let enrollment = sample_enrollment();
client
.transact_write_items()
.transact_items(
User::transact_update_by_id(
KeyId::pk("user-1"),
Update::set("role", "instructor"),
)
.condition(Condition::not_exists("role"))
.build(),
)
.transact_items(enrollment.transact_put().not_exists().build())
.send()
.await?;Implementations§
Source§impl<TD: TableDefinition, T, C: ConditionState> TransactUpdateRequest<TD, T, C>
impl<TD: TableDefinition, T, C: ConditionState> TransactUpdateRequest<TD, T, C>
Sourcepub fn new(key: Key<TD>, update: Update<'_>) -> Self
pub fn new(key: Key<TD>, update: Update<'_>) -> Self
Creates a new TransactUpdateRequest from a raw Key and an Update expression.
Prefer DynamoDBItemTransactOp::transact_update or
DynamoDBItemTransactOp::transact_update_by_id for typed construction.
Sourcepub fn into_inner(self) -> UpdateBuilder
pub fn into_inner(self) -> UpdateBuilder
Consumes the builder and returns the underlying SDK UpdateBuilder.
Use this escape hatch when you need to set options not exposed by this facade.
Sourcepub fn build(self) -> TransactWriteItem
pub fn build(self) -> TransactWriteItem
Finalizes the builder and returns a TransactWriteItem.
The returned value can be passed directly to the SDK’s
transact_write_items().transact_items(...) call.
§Examples
use dynamodb_facade::{Condition, DynamoDBItemTransactOp, KeyId, Update};
let enrollment = sample_enrollment();
// Atomically promote a user and create an enrollment
client
.transact_write_items()
.transact_items(
User::transact_update_by_id(
KeyId::pk("user-1"),
Update::set("role", "instructor"),
)
.condition(Condition::not_exists("role"))
.build(),
)
.transact_items(enrollment.transact_put().not_exists().build())
.send()
.await?;Source§impl<TD: TableDefinition, T> TransactUpdateRequest<TD, T, NoCondition>
impl<TD: TableDefinition, T> TransactUpdateRequest<TD, T, NoCondition>
Sourcepub fn condition(
self,
condition: Condition<'_>,
) -> TransactUpdateRequest<TD, T, AlreadyHasCondition>
pub fn condition( self, condition: Condition<'_>, ) -> TransactUpdateRequest<TD, T, AlreadyHasCondition>
Adds a condition expression that must be satisfied for the update to succeed.
DynamoDB accepts a single condition expression per operation, so this method can only be called once. If the condition fails, the entire transaction is cancelled.
§Examples
use dynamodb_facade::{DynamoDBItemTransactOp, KeyId, Update, Condition};
let transact_item = User::transact_update_by_id(
KeyId::pk("user-1"),
Update::set("role", "instructor"),
)
.condition(Condition::not_exists("role"))
.build();Source§impl<TD: TableDefinition, T: DynamoDBItem<TD>> TransactUpdateRequest<TD, T, NoCondition>
impl<TD: TableDefinition, T: DynamoDBItem<TD>> TransactUpdateRequest<TD, T, NoCondition>
Sourcepub fn exists(self) -> TransactUpdateRequest<TD, T, AlreadyHasCondition>
pub fn exists(self) -> TransactUpdateRequest<TD, T, AlreadyHasCondition>
Adds an attribute_exists(<PK>) condition.
§Examples
use dynamodb_facade::{DynamoDBItemTransactOp, KeyId, Update};
let transact_item = User::transact_update_by_id(
KeyId::pk("user-1"),
Update::increment("enrollment_count", 1),
)
.exists()
.build();Sourcepub fn not_exists(self) -> TransactUpdateRequest<TD, T, AlreadyHasCondition>
pub fn not_exists(self) -> TransactUpdateRequest<TD, T, AlreadyHasCondition>
Adds an attribute_not_exists(<PK>) condition.
Useful for upsert-style updates that must only apply when the item does not yet exist.
§Examples
use dynamodb_facade::{DynamoDBItemTransactOp, KeyId, Update};
// Initialize enrollment progress only if the enrollment doesn't exist yet
let transact_item = Enrollment::transact_update_by_id(
KeyId::pk("user-1").sk("course-42"),
Update::set("progress", 0.0),
)
.not_exists()
.build();Auto Trait Implementations§
impl<TD, T, C> Freeze for TransactUpdateRequest<TD, T, C>
impl<TD, T, C> RefUnwindSafe for TransactUpdateRequest<TD, T, C>
impl<TD, T, C> Send for TransactUpdateRequest<TD, T, C>
impl<TD, T, C> Sync for TransactUpdateRequest<TD, T, C>
impl<TD, T, C> Unpin for TransactUpdateRequest<TD, T, C>
impl<TD, T, C> UnsafeUnpin for TransactUpdateRequest<TD, T, C>
impl<TD, T, C> UnwindSafe for TransactUpdateRequest<TD, T, C>
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Source§impl<T> Instrument for T
impl<T> Instrument for T
Source§fn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
Source§fn in_current_span(self) -> Instrumented<Self>
fn in_current_span(self) -> Instrumented<Self>
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self>
fn into_either(self, into_left: bool) -> Either<Self, Self>
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 moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
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