From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from firstgate.proxmox.com (firstgate.proxmox.com [212.224.123.68]) by lore.proxmox.com (Postfix) with ESMTPS id BFA741FF165 for ; Thu, 3 Jul 2025 15:19:05 +0200 (CEST) Received: from firstgate.proxmox.com (localhost [127.0.0.1]) by firstgate.proxmox.com (Proxmox) with ESMTP id 10F4714242; Thu, 3 Jul 2025 15:19:46 +0200 (CEST) From: Christian Ebner To: pbs-devel@lists.proxmox.com Date: Thu, 3 Jul 2025 15:17:59 +0200 Message-ID: <20250703131837.786811-12-c.ebner@proxmox.com> X-Mailer: git-send-email 2.47.2 In-Reply-To: <20250703131837.786811-1-c.ebner@proxmox.com> References: <20250703131837.786811-1-c.ebner@proxmox.com> MIME-Version: 1.0 X-SPAM-LEVEL: Spam detection results: 0 AWL 0.038 Adjusted score from AWL reputation of From: address BAYES_00 -1.9 Bayes spam probability is 0 to 1% DMARC_MISSING 0.1 Missing DMARC policy KAM_DMARC_STATUS 0.01 Test Rule for DKIM or SPF Failure with Strict Alignment SPF_HELO_NONE 0.001 SPF: HELO does not publish an SPF Record SPF_PASS -0.001 SPF: sender matches SPF record Subject: [pbs-devel] [PATCH proxmox-backup v5 08/46] s3 client: add type for last modified timestamp in responses X-BeenThere: pbs-devel@lists.proxmox.com X-Mailman-Version: 2.1.29 Precedence: list List-Id: Proxmox Backup Server development discussion List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Reply-To: Proxmox Backup Server development discussion Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Errors-To: pbs-devel-bounces@lists.proxmox.com Sender: "pbs-devel" Adds a helper to parse modified timestamps as encountered in s3 list objects v2 and copy object api calls. Signed-off-by: Christian Ebner --- Cargo.toml | 2 ++ debian/control | 1 + pbs-s3-client/Cargo.toml | 2 ++ pbs-s3-client/src/lib.rs | 20 ++++++++++++++++++++ 4 files changed, 25 insertions(+) diff --git a/Cargo.toml b/Cargo.toml index 5c69f249a..6c617989b 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -133,6 +133,7 @@ hickory-resolver = { version = "0.24.1", default-features = false, features = [ http-body-util = "0.1" hyper-util = "0.1" hyper = { version = "1", features = [ "full" ] } +iso8601 = "0.6.1" libc = "0.2" log = "0.4.17" nix = "0.29" @@ -146,6 +147,7 @@ regex = "1.5.5" rustyline = "14" serde = { version = "1.0", features = ["derive"] } serde_json = "1.0" +serde_plain = "1.0" siphasher = "0.3" syslog = "6" tar = "0.4" diff --git a/debian/control b/debian/control index 0eeaae975..f592bd333 100644 --- a/debian/control +++ b/debian/control @@ -46,6 +46,7 @@ Build-Depends: bash-completion, librust-hyper-util-0.1+server-graceful-dev, librust-hyper-util-0.1+service-dev, librust-hyper-util-0.1+tokio-dev, + librust-iso8601-dev, librust-libc-0.2+default-dev, librust-log-0.4+default-dev (>= 0.4.17-~~), librust-nix-0.29+default-dev, diff --git a/pbs-s3-client/Cargo.toml b/pbs-s3-client/Cargo.toml index 146fde84e..d41cd8870 100644 --- a/pbs-s3-client/Cargo.toml +++ b/pbs-s3-client/Cargo.toml @@ -12,8 +12,10 @@ hex = { workspace = true, features = [ "serde" ] } http-body-util.workspace = true hyper-util = { workspace = true, features = ["client-legacy", "tokio", "http1"] } hyper.workspace = true +iso8601.workspace = true openssl.workspace = true serde.workspace = true +serde_plain.workspace = true tracing.workspace = true url.workspace = true diff --git a/pbs-s3-client/src/lib.rs b/pbs-s3-client/src/lib.rs index 14f86bf88..8845b8f97 100644 --- a/pbs-s3-client/src/lib.rs +++ b/pbs-s3-client/src/lib.rs @@ -4,3 +4,23 @@ mod client; pub use client::{S3Client, S3ClientOptions, S3PathPrefix}; mod object_key; pub use object_key::{S3ObjectKey, S3_CONTENT_PREFIX}; + +use std::time::Duration; + +use anyhow::{anyhow, bail, Error}; + +#[derive(Debug)] +pub struct LastModifiedTimestamp { + _datetime: iso8601::DateTime, +} + +impl std::str::FromStr for LastModifiedTimestamp { + type Err = Error; + + fn from_str(timestamp: &str) -> Result { + let _datetime = iso8601::datetime(timestamp).map_err(|err| anyhow!(err))?; + Ok(Self { _datetime }) + } +} + +serde_plain::derive_deserialize_from_fromstr!(LastModifiedTimestamp, "last modified timestamp"); -- 2.47.2 _______________________________________________ pbs-devel mailing list pbs-devel@lists.proxmox.com https://lists.proxmox.com/cgi-bin/mailman/listinfo/pbs-devel