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
use aws_sdk_dynamodbstreams as dynamodbstreams;
/// A shard representation to retreive DynamoDB Streams records.
#[derive(Debug, Clone)]
pub struct Shard {
id: String,
iterator: Option<String>,
parent_shard_id: Option<String>,
}
impl Shard {
/// Create a new shard from
/// [`aws_sdk_dynamodbstreams::types::Shard`](aws_sdk_dynamodbstreams::types::Shard).
/// If the input's shard_id is None, this method also returns None.
///
/// ```rust
/// use aws_sdk_dynamodbstreams as dynamodbstreams;
/// use dynamo_subscriber::types::Shard;
///
/// // Create a aws_sdk_dynamodbstreams's Shard with shard_id
/// let original = dynamodbstreams::types::Shard::builder()
/// .shard_id("0001")
/// .build();
/// assert!(original.shard_id().is_some());
///
/// // This case, the shard should exist.
/// let shard = Shard::new(original);
/// assert!(shard.is_some());
///
/// // Create a aws_sdk_dynamodbstreams's Shard without shard_id
/// let original = dynamodbstreams::types::Shard::builder()
/// .build();
/// assert!(original.shard_id().is_none());
///
/// // This case, the shard should not exist.
/// let shard = Shard::new(original);
/// assert!(shard.is_none());
/// ```
pub fn new(shard: dynamodbstreams::types::Shard) -> Option<Self> {
let dynamodbstreams::types::Shard {
shard_id,
parent_shard_id,
..
} = shard;
shard_id.map(|id| Self {
id,
iterator: None,
parent_shard_id,
})
}
/// Return the shard id.
pub fn id(&self) -> &str {
self.id.as_str()
}
/// Return the shard iterator id.
pub fn iterator(&self) -> Option<&str> {
self.iterator.as_deref()
}
/// Return the parent shard id.
pub fn parent_shard_id(&self) -> Option<&str> {
self.parent_shard_id.as_deref()
}
/// Return [`Shard`] with passed shard iterator id.
pub fn set_iterator(self, iterator: Option<String>) -> Self {
Self { iterator, ..self }
}
}