From: Dominik Csapak <d.csapak@proxmox.com>
To: pbs-devel@lists.proxmox.com
Subject: [pbs-devel] [PATCH proxmox v2 1/2] move io error helpers to proxmox-lang
Date: Mon, 21 Feb 2022 11:39:15 +0100 [thread overview]
Message-ID: <20220221103918.2407442-2-d.csapak@proxmox.com> (raw)
In-Reply-To: <20220221103918.2407442-1-d.csapak@proxmox.com>
this removes proxmox_sys as a dependecy for proxmox-async
Signed-off-by: Dominik Csapak <d.csapak@proxmox.com>
---
proxmox-async/Cargo.toml | 2 +-
proxmox-async/src/compression.rs | 2 +-
proxmox-async/src/io/async_channel_writer.rs | 3 +-
proxmox-http/Cargo.toml | 2 +
proxmox-http/src/websocket/mod.rs | 2 +-
proxmox-lang/src/error.rs | 53 ++++++++++++++++++++
proxmox-lang/src/lib.rs | 1 +
proxmox-sys/src/error.rs | 7 +--
proxmox-sys/src/linux/pid.rs | 4 +-
proxmox-sys/src/macros.rs | 44 ----------------
proxmox-sys/src/mmap.rs | 4 +-
11 files changed, 66 insertions(+), 58 deletions(-)
create mode 100644 proxmox-lang/src/error.rs
diff --git a/proxmox-async/Cargo.toml b/proxmox-async/Cargo.toml
index 291ff32..917e5f5 100644
--- a/proxmox-async/Cargo.toml
+++ b/proxmox-async/Cargo.toml
@@ -20,9 +20,9 @@ pin-utils = "0.1.0"
tokio = { version = "1.0", features = ["fs", "net", "rt", "rt-multi-thread", "sync"] }
walkdir = "2"
-proxmox-sys = { path = "../proxmox-sys", version = "0.2.0" }
proxmox-io = { path = "../proxmox-io", version = "1", features = [ "tokio" ] }
proxmox-time = { path = "../proxmox-time", version = "1" }
+proxmox-lang = { path = "../proxmox-lang", version = "1" }
[dev-dependencies]
tokio = { version = "1.6", features = [ "macros" ] }
diff --git a/proxmox-async/src/compression.rs b/proxmox-async/src/compression.rs
index b36f291..632a599 100644
--- a/proxmox-async/src/compression.rs
+++ b/proxmox-async/src/compression.rs
@@ -10,7 +10,7 @@ use futures::stream::Stream;
use tokio::io::{AsyncRead, AsyncReadExt, AsyncWrite, AsyncWriteExt};
use proxmox_io::ByteBuffer;
-use proxmox_sys::io_format_err;
+use proxmox_lang::io_format_err;
const BUFFER_SIZE: usize = 8192;
diff --git a/proxmox-async/src/io/async_channel_writer.rs b/proxmox-async/src/io/async_channel_writer.rs
index f63648a..697e65b 100644
--- a/proxmox-async/src/io/async_channel_writer.rs
+++ b/proxmox-async/src/io/async_channel_writer.rs
@@ -12,8 +12,7 @@ use tokio::io::AsyncWrite;
use tokio::sync::mpsc::Sender;
use proxmox_io::ByteBuffer;
-use proxmox_sys::error::io_err_other;
-use proxmox_sys::io_format_err;
+use proxmox_lang::{error::io_err_other, io_format_err};
/// Wrapper around tokio::sync::mpsc::Sender, which implements Write
pub struct AsyncChannelWriter {
diff --git a/proxmox-http/Cargo.toml b/proxmox-http/Cargo.toml
index 884fe40..40bba3e 100644
--- a/proxmox-http/Cargo.toml
+++ b/proxmox-http/Cargo.toml
@@ -23,6 +23,7 @@ tokio-openssl = { version = "0.6.1", optional = true }
proxmox-sys = { path = "../proxmox-sys", optional = true, version = "0.2.0" }
proxmox-io = { path = "../proxmox-io", optional = true, version = "1.0.0" }
+proxmox-lang = { path = "../proxmox-lang", optional = true, version = "1.0.0" }
[features]
default = []
@@ -36,6 +37,7 @@ websocket = [
"openssl",
"proxmox-sys",
"proxmox-io/tokio",
+ "proxmox-lang",
"tokio/io-util",
"tokio/sync",
]
diff --git a/proxmox-http/src/websocket/mod.rs b/proxmox-http/src/websocket/mod.rs
index cb17776..50477f6 100644
--- a/proxmox-http/src/websocket/mod.rs
+++ b/proxmox-http/src/websocket/mod.rs
@@ -23,7 +23,7 @@ use futures::future::FutureExt;
use futures::ready;
use proxmox_io::ByteBuffer;
-use proxmox_sys::error::io_err_other;
+use proxmox_lang::error::io_err_other;
// see RFC6455 section 7.4.1
#[derive(Debug, Clone, Copy)]
diff --git a/proxmox-lang/src/error.rs b/proxmox-lang/src/error.rs
new file mode 100644
index 0000000..2e03c5b
--- /dev/null
+++ b/proxmox-lang/src/error.rs
@@ -0,0 +1,53 @@
+//! A set of macros/helpers for I/O handling. These provide for `std::io::Error` what `anyhow` provides
+//! for `anyhow::Error.`
+
+use std::io;
+
+/// Helper to convert non-system-errors into an `io::Error` or `io::ErrorKind::Other`.
+///
+/// A more convenient way is to use the `io_format_err!` macro.
+pub fn io_err_other<E: ToString>(e: E) -> io::Error {
+ io::Error::new(std::io::ErrorKind::Other, e.to_string())
+}
+
+
+/// Like anyhow's `format_err` but producing a `std::io::Error`.
+#[macro_export]
+macro_rules! io_format_err {
+ ($($msg:tt)+) => {
+ ::std::io::Error::new(::std::io::ErrorKind::Other, format!($($msg)+))
+ };
+}
+
+/// Shortcut to return an `io::Error::last_os_error`.
+///
+/// This is effectively `return Err(::std::io::Error::last_os_error().into());`.
+#[macro_export]
+macro_rules! io_bail_last {
+ () => {{
+ return Err(::std::io::Error::last_os_error().into());
+ }};
+}
+
+/// Like anyhow's `bail` but producing a `std::io::Error`.
+#[macro_export]
+macro_rules! io_bail {
+ ($($msg:tt)+) => {{
+ return Err($crate::io_format_err!($($msg)+));
+ }};
+}
+
+#[doc(hidden)]
+/// Non-panicking assertion: shortcut for returning an `io::Error` if the condition is not met.
+/// Essentially: `if !expr { io_bail_last!() }`.
+///
+/// Note that this uses `errno`, care must be taken not to overwrite it with different value as a
+/// side effect.
+#[macro_export]
+macro_rules! io_assert {
+ ($value:expr) => {
+ if !$value {
+ $crate::io_bail_last!();
+ }
+ };
+}
diff --git a/proxmox-lang/src/lib.rs b/proxmox-lang/src/lib.rs
index f5c6ebe..788165a 100644
--- a/proxmox-lang/src/lib.rs
+++ b/proxmox-lang/src/lib.rs
@@ -6,6 +6,7 @@
mod constnamedbitmap;
+pub mod error;
pub mod ops;
/// Macro to write error-handling blocks (like perl eval {})
diff --git a/proxmox-sys/src/error.rs b/proxmox-sys/src/error.rs
index 3af6038..78f846b 100644
--- a/proxmox-sys/src/error.rs
+++ b/proxmox-sys/src/error.rs
@@ -18,12 +18,7 @@ use std::io;
use nix::errno::Errno;
use nix::Error;
-/// Helper to convert non-system-errors into an `io::Error` or `io::ErrorKind::Other`.
-///
-/// A more convenient way is to use the `io_format_err!` macro.
-pub fn io_err_other<E: ToString>(e: E) -> io::Error {
- io::Error::new(std::io::ErrorKind::Other, e.to_string())
-}
+use proxmox_lang::error::io_err_other;
/// This trait should be implemented for error types which can represent system errors. Note that
/// it is discouraged to try to map non-system errors to with this trait, since users of this trait
diff --git a/proxmox-sys/src/linux/pid.rs b/proxmox-sys/src/linux/pid.rs
index ad5fdc2..07d7163 100644
--- a/proxmox-sys/src/linux/pid.rs
+++ b/proxmox-sys/src/linux/pid.rs
@@ -11,9 +11,9 @@ use nix::sys::stat::Mode;
use nix::unistd::Pid;
use nix::NixPath;
-use proxmox_lang::c_str;
+use proxmox_lang::{c_str, error::io_err_other};
-use crate::error::{io_err_other, SysResult};
+use crate::error::SysResult;
use crate::linux::procfs::{MountInfo, PidStat};
use crate::fd::Fd;
use crate::{c_result, c_try};
diff --git a/proxmox-sys/src/macros.rs b/proxmox-sys/src/macros.rs
index cab6eb3..a76db90 100644
--- a/proxmox-sys/src/macros.rs
+++ b/proxmox-sys/src/macros.rs
@@ -1,47 +1,3 @@
-//! A set of macros for I/O handling. These provide for `std::io::Error` what `anyhow` provides
-//! for `anyhow::Error.`
-
-/// Like anyhow's `format_err` but producing a `std::io::Error`.
-#[macro_export]
-macro_rules! io_format_err {
- ($($msg:tt)+) => {
- ::std::io::Error::new(::std::io::ErrorKind::Other, format!($($msg)+))
- };
-}
-
-/// Shortcut to return an `io::Error::last_os_error`.
-///
-/// This is effectively `return Err(::std::io::Error::last_os_error().into());`.
-#[macro_export]
-macro_rules! io_bail_last {
- () => {{
- return Err(::std::io::Error::last_os_error().into());
- }};
-}
-
-/// Like anyhow's `bail` but producing a `std::io::Error`.
-#[macro_export]
-macro_rules! io_bail {
- ($($msg:tt)+) => {{
- return Err($crate::io_format_err!($($msg)+));
- }};
-}
-
-#[doc(hidden)]
-/// Non-panicking assertion: shortcut for returning an `io::Error` if the condition is not met.
-/// Essentially: `if !expr { io_bail_last!() }`.
-///
-/// Note that this uses `errno`, care must be taken not to overwrite it with different value as a
-/// side effect.
-#[macro_export]
-macro_rules! io_assert {
- ($value:expr) => {
- if !$value {
- $crate::io_bail_last!();
- }
- };
-}
-
/// Roughly equivalent to `nix::Errno::result`. Turns a `-1` into an `io::Error`, while passing
/// other values through as `Ok(n)`.
#[macro_export]
diff --git a/proxmox-sys/src/mmap.rs b/proxmox-sys/src/mmap.rs
index cfbf9f7..b296c30 100644
--- a/proxmox-sys/src/mmap.rs
+++ b/proxmox-sys/src/mmap.rs
@@ -7,7 +7,9 @@ use std::{io, mem, ptr};
use nix::sys::mman;
-use crate::error::{io_err_other, SysError};
+use proxmox_lang::error::io_err_other;
+
+use crate::error::{SysError};
pub struct Mmap<T> {
data: *mut T,
--
2.30.2
next prev parent reply other threads:[~2022-02-21 10:39 UTC|newest]
Thread overview: 8+ messages / expand[flat|nested] mbox.gz Atom feed top
2022-02-21 10:39 [pbs-devel] [PATCH proxmox/proxmox-backup v2] improve proxmox-async dependencies Dominik Csapak
2022-02-21 10:39 ` Dominik Csapak [this message]
2022-02-21 12:48 ` [pbs-devel] applied: [PATCH proxmox v2 1/2] move io error helpers to proxmox-lang Wolfgang Bumiller
2022-02-21 10:39 ` [pbs-devel] [PATCH proxmox v2 2/2] split out compression code into new crate 'proxmox-compression' Dominik Csapak
2022-02-21 13:21 ` [pbs-devel] applied: " Wolfgang Bumiller
2022-02-21 10:39 ` [pbs-devel] [PATCH proxmox-backup v2 1/2] depend on new 'proxmox-compression' crate Dominik Csapak
2022-02-21 13:28 ` [pbs-devel] applied-series: " Wolfgang Bumiller
2022-02-21 10:39 ` [pbs-devel] [PATCH proxmox-backup v2 2/2] use io_format_err, io_bail, io_err_other from proxmox-lang Dominik Csapak
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20220221103918.2407442-2-d.csapak@proxmox.com \
--to=d.csapak@proxmox.com \
--cc=pbs-devel@lists.proxmox.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.
Service provided by Proxmox Server Solutions GmbH | Privacy | Legal