dynamo_subscriber/types/
shard.rs

1use aws_sdk_dynamodbstreams as dynamodbstreams;
2
3/// A shard representation to retreive DynamoDB Streams records.
4#[derive(Debug, Clone)]
5pub struct Shard {
6    id: String,
7    iterator: Option<String>,
8    parent_shard_id: Option<String>,
9}
10
11impl Shard {
12    /// Create a new shard from
13    /// [`aws_sdk_dynamodbstreams::types::Shard`](aws_sdk_dynamodbstreams::types::Shard).
14    /// If the input's shard_id is None, this method also returns None.
15    ///
16    /// ```rust
17    /// use aws_sdk_dynamodbstreams as dynamodbstreams;
18    /// use dynamo_subscriber::types::Shard;
19    ///
20    /// // Create a aws_sdk_dynamodbstreams's Shard with shard_id
21    /// let original = dynamodbstreams::types::Shard::builder()
22    ///     .shard_id("0001")
23    ///     .build();
24    /// assert!(original.shard_id().is_some());
25    ///
26    /// // This case, the shard should exist.
27    /// let shard = Shard::new(original);
28    /// assert!(shard.is_some());
29    ///
30    /// // Create a aws_sdk_dynamodbstreams's Shard without shard_id
31    /// let original = dynamodbstreams::types::Shard::builder()
32    ///     .build();
33    /// assert!(original.shard_id().is_none());
34    ///
35    /// // This case, the shard should not exist.
36    /// let shard = Shard::new(original);
37    /// assert!(shard.is_none());
38    /// ```
39    pub fn new(shard: dynamodbstreams::types::Shard) -> Option<Self> {
40        let dynamodbstreams::types::Shard {
41            shard_id,
42            parent_shard_id,
43            ..
44        } = shard;
45
46        shard_id.map(|id| Self {
47            id,
48            iterator: None,
49            parent_shard_id,
50        })
51    }
52
53    /// Return the shard id.
54    pub fn id(&self) -> &str {
55        self.id.as_str()
56    }
57
58    /// Return the shard iterator id.
59    pub fn iterator(&self) -> Option<&str> {
60        self.iterator.as_deref()
61    }
62
63    /// Return the parent shard id.
64    pub fn parent_shard_id(&self) -> Option<&str> {
65        self.parent_shard_id.as_deref()
66    }
67
68    /// Return [`Option<Shard>`] with passed shard iterator id.
69    /// Setting None as the shard iterator means the shard drops because None shard iterator will
70    /// get no records from the DynamoDB Table.
71    pub fn set_iterator(self, iterator: Option<String>) -> Option<Self> {
72        if iterator.is_some() {
73            Some(Self { iterator, ..self })
74        } else {
75            None
76        }
77    }
78}