1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
mod builder;
mod to_aws;

pub use builder::Builder;

use std::collections::HashMap;

use aws_sdk_dynamodb::types::AttributeValue;

/// The data needed for various [`aws_sdk_dynamodb`] input types.
///
/// Use [`Builder`] (via [`Expression::builder()`]) to create a DynamoDB
/// condition, filter, key condition, or update expression.
///
/// You can use the these methods to consume this and set up a DynamoDB
/// operation (via an appropriate fluent builder):
/// * [`put_item`]
/// * [`get_item`]
/// * [`scan`]
/// * [`query`]
/// * [`update_item`]
/// * [`delete_item`]
///
/// See also the `to_*_input_builder` and `to_*_fluent_builder` methods for
/// populating [`aws_sdk_dynamodb`] types.
///
/// You can use the fields on this struct to manually populate an
/// [`aws_sdk_dynamodb`] input type, or you can use one of the many methods on
/// this to automatically build or populate one of those types.
///
/// [`Expression::builder()`]: Self::builder
/// [`put_item`]: Self::put_item
/// [`get_item`]: Self::get_item
/// [`scan`]: Self::scan
/// [`query`]: Self::query
/// [`update_item`]: Self::update_item
/// [`delete_item`]: Self::delete_item
// TODO: An example.
#[must_use = "Use the fields or methods to create an input type for `aws_sdk_dynamodb"]
#[derive(Debug, Clone)]
#[cfg_attr(test, derive(PartialEq))]
pub struct Expression {
    /// The string to use as a DynamoDB [condition expression][1].
    ///
    /// Be sure to also use [`.expression_attribute_names`] and
    /// [`.expression_attribute_values`].
    ///
    /// [1]: https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/Expressions.ConditionExpressions.html
    /// [`.expression_attribute_names`]: Self::expression_attribute_names
    /// [`.expression_attribute_values`]: Self::expression_attribute_values
    pub condition_expression: Option<String>,

    /// The string to use use as a DynamoDB [key condition expression][1].
    ///
    /// Be sure to also use [`.expression_attribute_names`] and
    /// [`.expression_attribute_values`].
    ///
    /// [1]: https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/Query.KeyConditionExpressions.html
    /// [`.expression_attribute_names`]: Self::expression_attribute_names
    /// [`.expression_attribute_values`]: Self::expression_attribute_values
    pub key_condition_expression: Option<String>,

    /// The string to use as a DynamoDB [update expression][1].
    ///
    /// Be sure to also use [`.expression_attribute_names`] and
    /// [`.expression_attribute_values`].
    ///
    /// [1]: https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/Expressions.UpdateExpressions.html
    /// [`.expression_attribute_names`]: Self::expression_attribute_names
    /// [`.expression_attribute_values`]: Self::expression_attribute_values
    pub update_expression: Option<String>,

    /// The string to use as a DynamoDB [filter expression][1].
    ///
    /// Be sure to also use [`.expression_attribute_names`] and
    /// [`.expression_attribute_values`].
    ///
    /// [1]: https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/Query.FilterExpression.html
    /// [`.expression_attribute_names`]: Self::expression_attribute_names
    /// [`.expression_attribute_values`]: Self::expression_attribute_values
    pub filter_expression: Option<String>,

    /// The string to use as a DynamoDB [projection expression][1].
    ///
    /// Be sure to also use [`.expression_attribute_names`].
    ///
    /// [1]: https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/Expressions.ProjectionExpressions.html
    /// [`.expression_attribute_names`]: Self::expression_attribute_names
    pub projection_expression: Option<String>,

    /// DynamoDB [expression attribute names][1].
    ///
    /// [1]: https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/Expressions.ExpressionAttributeNames.html
    pub expression_attribute_names: Option<HashMap<String, String>>,

    /// DynamoDB [expression attribute values][1].
    ///
    /// [1]: https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/Expressions.ExpressionAttributeValues.html
    pub expression_attribute_values: Option<HashMap<String, AttributeValue>>,
}

impl Expression {
    pub fn builder() -> Builder {
        Builder::default()
    }
}