From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from firstgate.proxmox.com (firstgate.proxmox.com [212.224.123.68]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits)) (No client certificate requested) by lists.proxmox.com (Postfix) with ESMTPS id DF35573FD0; Mon, 31 May 2021 15:07:34 +0200 (CEST) Received: from firstgate.proxmox.com (localhost [127.0.0.1]) by firstgate.proxmox.com (Proxmox) with ESMTP id DC1421EFF3; Mon, 31 May 2021 15:07:34 +0200 (CEST) Received: from proxmox-new.maurer-it.com (proxmox-new.maurer-it.com [94.136.29.106]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits)) (No client certificate requested) by firstgate.proxmox.com (Proxmox) with ESMTPS id 6E61D1EFE8; Mon, 31 May 2021 15:07:31 +0200 (CEST) Received: from proxmox-new.maurer-it.com (localhost.localdomain [127.0.0.1]) by proxmox-new.maurer-it.com (Proxmox) with ESMTP id 459B54352B; Mon, 31 May 2021 15:07:31 +0200 (CEST) Date: Mon, 31 May 2021 15:07:30 +0200 From: Wolfgang Bumiller To: Fabian Ebner Cc: pve-devel@lists.proxmox.com, pbs-devel@lists.proxmox.com Message-ID: <20210531130730.afqwwxex7yl3inp5@olga.proxmox.com> References: <20210528143002.16190-1-f.ebner@proxmox.com> <20210528143002.16190-17-f.ebner@proxmox.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20210528143002.16190-17-f.ebner@proxmox.com> User-Agent: NeoMutt/20180716 X-SPAM-LEVEL: Spam detection results: 0 AWL 0.016 Adjusted score from AWL reputation of From: address 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: Re: [pve-devel] [pbs-devel] [RFC v5 pve-rs 16/23] add perlmod crate with initial APT module X-BeenThere: pve-devel@lists.proxmox.com X-Mailman-Version: 2.1.29 Precedence: list List-Id: Proxmox VE development discussion List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 31 May 2021 13:07:34 -0000 On Fri, May 28, 2021 at 04:29:55PM +0200, Fabian Ebner wrote: > and disable diskmanage for now, whose Cargo.toml references local paths. > > Signed-off-by: Fabian Ebner > --- > > New in v5. > > Cargo.toml | 3 +- > perlmod/Cargo.toml | 17 ++++++++++ > perlmod/src/apt/mod.rs | 1 + > perlmod/src/apt/repositories.rs | 55 +++++++++++++++++++++++++++++++++ > perlmod/src/lib.rs | 1 + > 5 files changed, 76 insertions(+), 1 deletion(-) > create mode 100644 perlmod/Cargo.toml > create mode 100644 perlmod/src/apt/mod.rs > create mode 100644 perlmod/src/apt/repositories.rs > create mode 100644 perlmod/src/lib.rs > > diff --git a/Cargo.toml b/Cargo.toml > index d16a498..0ffd4a2 100644 > --- a/Cargo.toml > +++ b/Cargo.toml > @@ -1,4 +1,5 @@ > [workspace] > members = [ > - "diskmanage", > +# "diskmanage", > + "perlmod", > ] > diff --git a/perlmod/Cargo.toml b/perlmod/Cargo.toml > new file mode 100644 > index 0000000..397f444 > --- /dev/null > +++ b/perlmod/Cargo.toml > @@ -0,0 +1,17 @@ > +[package] > +name = "pve-rs" > +version = "0.1.0" > +authors = ["Proxmox Support Team "] > +edition = "2018" > +license = "AGPL-3" > +description = "Perl bindings for proxmox-apt" > +homepage = "https://www.proxmox.com" > + > +[lib] > +crate-type = [ "cdylib" ] > + > +[dependencies] > +anyhow = "1.0" > +proxmox = { version = "0.11.5" } > +proxmox-apt = "0.1.0" > +perlmod = { version = "0.4.3", features = [ "exporter" ] } > diff --git a/perlmod/src/apt/mod.rs b/perlmod/src/apt/mod.rs > new file mode 100644 > index 0000000..574c1a7 > --- /dev/null > +++ b/perlmod/src/apt/mod.rs > @@ -0,0 +1 @@ > +mod repositories; > diff --git a/perlmod/src/apt/repositories.rs b/perlmod/src/apt/repositories.rs > new file mode 100644 > index 0000000..37a62f2 > --- /dev/null > +++ b/perlmod/src/apt/repositories.rs > @@ -0,0 +1,55 @@ > +#[perlmod::package(name = "PVE::RS::APT::Repositories", lib = "pve_rs")] > +mod export { > + use anyhow::{bail, Error}; > + > + use perlmod::{to_value, Value}; > + > + #[export(raw_return)] > + fn repositories() -> Result<(Value, Value, Value), Error> { Please also add some documentation to exported methods, especially if you skip writing out the return type. Ideally we'd also add some kind of doc generation to perlmod in the future which could in theory also link to the types from the foreign crates you're returning here, so please assume that that's already the case ;-) Come to think of it, since we need a `mod` statement anyway, it probably makes sense to use `pub fn` for exported functions (since the `mod` itself is not-`pub`). This also means we could utilize `#![deny(missing_docs)]` inside those `mod`s ;-) > + let (files, errors) = proxmox_apt::repositories::repositories()?; > + > + if files.is_empty() { > + bail!("no APT repository files could be parsed!"); > + } > + > + let common_digest = proxmox_apt::repositories::common_digest(&files); > + > + let hex_digest = proxmox::tools::digest_to_hex(&common_digest); > + > + Ok(( > + to_value(&files)?, > + to_value(&errors)?, > + to_value(&hex_digest)?, > + )) > + } > + > + #[export(raw_return)] > + fn check_repositories(digest: String) -> Result<(Value, Value, Value), Error> { ^ same