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
63#[derive(Debug, Clone, Serialize, Deserialize, Default)]
65#[serde(rename_all = "camelCase")]
66pub struct RetentionRuleDetails {
67 #[serde(skip_serializing_if = "Option::is_none")]
69 pub display_name: Option<String>,
70 #[serde(skip_serializing_if = "Option::is_none")]
72 pub duration: Option<RetentionDuration>,
73 #[serde(skip_serializing_if = "Option::is_none")]
75 pub time_rule_locked: Option<String>,
76}
77
78impl RetentionRule {
79 pub async fn delete(&self, bucket: &Bucket) -> Result<()> {
81 bucket.delete_retention_rule(&self.id).await
82 }
83
84 pub async fn update(
86 &self,
87 bucket: &Bucket,
88 details: RetentionRuleDetails,
89 ) -> Result<RetentionRule> {
90 bucket.update_retention_rule(&self.id, details).await
91 }
92}