oci_api/services/object_storage/
models.rs1use crate::error::Result;
2use crate::services::object_storage::client::Bucket;
3use serde::{Deserialize, Serialize};
4
5#[derive(Clone, Debug, Serialize, Deserialize)]
7pub struct Object {
8 pub name: String,
10 pub value: String,
12}
13
14impl Object {
15 pub fn new(name: impl Into<String>, value: impl Into<String>) -> Self {
16 Self {
17 name: name.into(),
18 value: value.into(),
19 }
20 }
21}
22
23#[derive(Debug, Clone, Serialize, Deserialize)]
25#[serde(rename_all = "camelCase")]
26pub struct RetentionDuration {
27 pub time_amount: u64,
29 pub time_unit: RetentionTimeUnit,
31}
32
33#[derive(Debug, Clone, Serialize, Deserialize)]
35#[serde(rename_all = "SCREAMING_SNAKE_CASE")]
36pub enum RetentionTimeUnit {
37 Years,
38 Days,
39}
40
41#[derive(Debug, Clone, Serialize, Deserialize)]
43#[serde(rename_all = "camelCase")]
44pub struct RetentionRule {
45 pub id: String,
47 pub display_name: String,
49 #[serde(skip_serializing_if = "Option::is_none")]
51 pub duration: Option<RetentionDuration>,
52 #[serde(skip_serializing_if = "Option::is_none")]
54 pub time_rule_locked: Option<String>,
55 pub time_created: String,
57 pub time_modified: String,
59 pub etag: String,
61}
62
63impl From<RetentionRule> for String {
64 fn from(rule: RetentionRule) -> Self {
65 rule.id
66 }
67}
68
69impl From<&RetentionRule> for String {
70 fn from(rule: &RetentionRule) -> Self {
71 rule.id.clone()
72 }
73}
74
75#[derive(Debug, Clone, Serialize, Deserialize, Default)]
77#[serde(rename_all = "camelCase")]
78pub struct RetentionRuleDetails {
79 #[serde(skip_serializing_if = "Option::is_none")]
81 pub display_name: Option<String>,
82 #[serde(skip_serializing_if = "Option::is_none")]
84 pub duration: Option<RetentionDuration>,
85 #[serde(skip_serializing_if = "Option::is_none")]
87 pub time_rule_locked: Option<String>,
88}
89
90impl RetentionRule {
91 pub async fn delete(&self, bucket: &Bucket) -> Result<()> {
93 bucket.delete_retention_rule(&self.id).await
94 }
95
96 pub async fn update(
98 &self,
99 bucket: &Bucket,
100 details: RetentionRuleDetails,
101 ) -> Result<RetentionRule> {
102 bucket.update_retention_rule(&self.id, details).await
103 }
104}