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}