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
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 (see their docs for examples) to consume this
/// and set up a DynamoDB operation:
/// * [`Expression::put_item`]
/// * [`Expression::get_item`]
/// * [`Expression::scan`]
/// * [`Expression::query`]
/// * [`Expression::update_item`]
/// * [`Expression::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.
///
#[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()
    }
}