Skip to content

Commit 374c2c6

Browse files
authored
Merge pull request #21 from sile/update-dev-dpes
Update dev dependencies (clap, smol, anyhow->orfail)
2 parents a407725 + f5f27d6 commit 374c2c6

6 files changed

Lines changed: 82 additions & 66 deletions

File tree

Cargo.toml

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ md5 = "0.7"
1919
rand = "0.9"
2020

2121
[dev-dependencies]
22-
anyhow = "1"
23-
clap = { version = "3", features = ["derive"] }
22+
clap = { version = "4", features = ["derive"] }
23+
orfail = "1.1.0"
2424
serde_json = "1"
25-
smol = "1"
25+
smol = "2"

examples/epmd_cli.rs

Lines changed: 23 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99
//! ```
1010
use clap::{Parser, Subcommand};
1111
use erl_dist::epmd::{EpmdClient, NodeEntry};
12+
use orfail::OrFail;
1213

1314
#[derive(Debug, Parser)]
1415
#[clap(name = "epmd_cli")]
@@ -42,51 +43,50 @@ enum Command {
4243
},
4344
}
4445

45-
fn main() -> anyhow::Result<()> {
46+
fn main() -> orfail::Result<()> {
4647
let args = Args::parse();
4748

4849
smol::block_on(async {
4950
let stream =
50-
smol::net::TcpStream::connect(format!("{}:{}", args.epmd_host, args.epmd_port)).await?;
51+
smol::net::TcpStream::connect(format!("{}:{}", args.epmd_host, args.epmd_port))
52+
.await
53+
.or_fail()?;
5154
let client = EpmdClient::new(stream);
5255

5356
match args.command {
5457
Command::Names => {
5558
// 'NAMES_REQ'
56-
let names = client.get_names().await?;
59+
let names = client.get_names().await.or_fail()?;
5760
let result = serde_json::json!(names
5861
.into_iter()
5962
.map(|(name, port)| serde_json::json!({"name": name, "port": port}))
6063
.collect::<Vec<_>>());
61-
println!("{}", serde_json::to_string_pretty(&result)?);
64+
println!("{}", serde_json::to_string_pretty(&result).or_fail()?);
6265
}
6366
Command::NodeEntry { node } => {
6467
// 'PORT_PLEASE2_REQ'
65-
if let Some(node) = client.get_node(&node).await? {
66-
let result = serde_json::json!({
67-
"name": node.name,
68-
"port": node.port,
69-
"node_type": format!("{:?} ({})", node.node_type, u8::from(node.node_type)),
70-
"protocol": format!("{:?} ({})", node.protocol, u8::from(node.protocol)),
71-
"highest_version": node.highest_version,
72-
"lowest_version": node.lowest_version,
73-
"extra": node.extra
74-
});
75-
println!("{}", serde_json::to_string_pretty(&result)?);
76-
} else {
77-
anyhow::bail!("No such node: {:?}", node);
78-
}
68+
let node = client.get_node(&node).await.or_fail()?.or_fail()?;
69+
let result = serde_json::json!({
70+
"name": node.name,
71+
"port": node.port,
72+
"node_type": format!("{:?} ({})", node.node_type, u8::from(node.node_type)),
73+
"protocol": format!("{:?} ({})", node.protocol, u8::from(node.protocol)),
74+
"highest_version": node.highest_version,
75+
"lowest_version": node.lowest_version,
76+
"extra": node.extra
77+
});
78+
println!("{}", serde_json::to_string_pretty(&result).or_fail()?);
7979
}
8080
Command::Dump => {
8181
// 'DUMP_REQ'
82-
let result = client.dump().await?;
82+
let result = client.dump().await.or_fail()?;
8383
println!("{}", result);
8484
}
8585
Command::Kill => {
8686
// 'KILL_REQ'
87-
let result = client.kill().await?;
87+
let result = client.kill().await.or_fail()?;
8888
let result = serde_json::json!({ "result": result });
89-
println!("{}", serde_json::to_string_pretty(&result)?);
89+
println!("{}", serde_json::to_string_pretty(&result).or_fail()?);
9090
}
9191
Command::Register { name, port, hidden } => {
9292
// 'ALIVE2_REQ'
@@ -95,11 +95,11 @@ fn main() -> anyhow::Result<()> {
9595
} else {
9696
NodeEntry::new(&name, port)
9797
};
98-
let (_, creation) = client.register(node).await?;
98+
let (_, creation) = client.register(node).await.or_fail()?;
9999
let result = serde_json::json!({
100100
"creation": creation.get()
101101
});
102-
println!("{}", serde_json::to_string_pretty(&result)?);
102+
println!("{}", serde_json::to_string_pretty(&result).or_fail()?);
103103
}
104104
}
105105
Ok(())

examples/handshake.rs

Lines changed: 17 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
//! $ cargo run --example handshake -- --peer foo --self bar@localhost --cookie erlang_cookie
88
//! ```
99
use clap::Parser;
10+
use orfail::OrFail;
1011

1112
#[derive(Debug, Parser)]
1213
#[clap(name = "handshake")]
@@ -24,30 +25,31 @@ struct Args {
2425
impl Args {
2526
async fn peer_epmd_client(
2627
&self,
27-
) -> anyhow::Result<erl_dist::epmd::EpmdClient<smol::net::TcpStream>> {
28+
) -> orfail::Result<erl_dist::epmd::EpmdClient<smol::net::TcpStream>> {
2829
let addr = (self.peer_node.host(), erl_dist::epmd::DEFAULT_EPMD_PORT);
29-
let stream = smol::net::TcpStream::connect(addr).await?;
30+
let stream = smol::net::TcpStream::connect(addr).await.or_fail()?;
3031
Ok(erl_dist::epmd::EpmdClient::new(stream))
3132
}
3233

3334
async fn local_epmd_client(
3435
&self,
35-
) -> anyhow::Result<erl_dist::epmd::EpmdClient<smol::net::TcpStream>> {
36+
) -> orfail::Result<erl_dist::epmd::EpmdClient<smol::net::TcpStream>> {
3637
let addr = (self.local_node.host(), erl_dist::epmd::DEFAULT_EPMD_PORT);
37-
let stream = smol::net::TcpStream::connect(addr).await?;
38+
let stream = smol::net::TcpStream::connect(addr).await.or_fail()?;
3839
Ok(erl_dist::epmd::EpmdClient::new(stream))
3940
}
4041
}
4142

42-
fn main() -> anyhow::Result<()> {
43+
fn main() -> orfail::Result<()> {
4344
let args = Args::parse();
4445
smol::block_on(async {
4546
let peer_node = args
4647
.peer_epmd_client()
4748
.await?
4849
.get_node(&args.peer_node.name())
49-
.await?
50-
.ok_or_else(|| anyhow::anyhow!("no such node: {}", args.peer_node))?;
50+
.await
51+
.or_fail()?
52+
.or_fail()?;
5153
println!("Got peer node info: {:?}", peer_node);
5254

5355
let dummy_listening_port = 3333;
@@ -58,19 +60,23 @@ fn main() -> anyhow::Result<()> {
5860
.local_epmd_client()
5961
.await?
6062
.register(local_node.clone())
61-
.await?;
63+
.await
64+
.or_fail()?;
6265
println!("Registered self node: creation={:?}", creation);
6366

64-
let stream = smol::net::TcpStream::connect((args.peer_node.host(), peer_node.port)).await?;
67+
let stream = smol::net::TcpStream::connect((args.peer_node.host(), peer_node.port))
68+
.await
69+
.or_fail()?;
6570
let mut handshake = erl_dist::handshake::ClientSideHandshake::new(
6671
stream,
6772
erl_dist::node::LocalNode::new(args.local_node.clone(), creation),
6873
&args.cookie,
6974
);
7075
let _status = handshake
7176
.execute_send_name(erl_dist::LOWEST_DISTRIBUTION_PROTOCOL_VERSION)
72-
.await?;
73-
let (_, peer_node) = handshake.execute_rest(true).await?;
77+
.await
78+
.or_fail()?;
79+
let (_, peer_node) = handshake.execute_rest(true).await.or_fail()?;
7480
println!("Handshake finished: peer={:?}", peer_node);
7581

7682
std::mem::drop(keepalive_connection);

examples/recv_msg.rs

Lines changed: 14 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@
1515
//! ```
1616
use clap::Parser;
1717
use futures::stream::StreamExt;
18+
use orfail::OrFail;
1819

1920
#[derive(Debug, Parser)]
2021
#[clap(name = "recv_msg")]
@@ -33,18 +34,18 @@ struct Args {
3334
impl Args {
3435
async fn local_epmd_client(
3536
&self,
36-
) -> anyhow::Result<erl_dist::epmd::EpmdClient<smol::net::TcpStream>> {
37+
) -> orfail::Result<erl_dist::epmd::EpmdClient<smol::net::TcpStream>> {
3738
let addr = (self.local_node.host(), erl_dist::epmd::DEFAULT_EPMD_PORT);
38-
let stream = smol::net::TcpStream::connect(addr).await?;
39+
let stream = smol::net::TcpStream::connect(addr).await.or_fail()?;
3940
Ok(erl_dist::epmd::EpmdClient::new(stream))
4041
}
4142
}
4243

43-
fn main() -> anyhow::Result<()> {
44+
fn main() -> orfail::Result<()> {
4445
let args = Args::parse();
4546
smol::block_on(async {
46-
let listener = smol::net::TcpListener::bind("0.0.0.0:0").await?;
47-
let listening_port = listener.local_addr()?.port();
47+
let listener = smol::net::TcpListener::bind("0.0.0.0:0").await.or_fail()?;
48+
let listening_port = listener.local_addr().or_fail()?.port();
4849
println!("Listening port: {}", listening_port);
4950

5051
let local_node_entry = if args.published {
@@ -57,12 +58,12 @@ fn main() -> anyhow::Result<()> {
5758
.local_epmd_client()
5859
.await?
5960
.register(local_node_entry)
60-
.await?;
61+
.await
62+
.or_fail()?;
6163
println!("Registered self node: creation={:?}", creation);
6264

6365
let mut incoming = listener.incoming();
64-
while let Some(stream) = incoming.next().await {
65-
let stream = stream?;
66+
while let Some(stream) = incoming.next().await.transpose().or_fail()? {
6667
let mut local_node = erl_dist::node::LocalNode::new(args.local_node.clone(), creation);
6768
if args.published {
6869
local_node.flags |= erl_dist::DistributionFlags::PUBLISHED;
@@ -90,10 +91,10 @@ async fn handle_client(
9091
local_node: erl_dist::node::LocalNode,
9192
cookie: String,
9293
stream: smol::net::TcpStream,
93-
) -> anyhow::Result<()> {
94+
) -> orfail::Result<()> {
9495
let mut handshake =
9596
erl_dist::handshake::ServerSideHandshake::new(stream, local_node.clone(), &cookie);
96-
let status = if handshake.execute_recv_name().await?.is_some() {
97+
let status = if handshake.execute_recv_name().await.or_fail()?.is_some() {
9798
erl_dist::handshake::HandshakeStatus::Ok
9899
} else {
99100
// Dynamic name.
@@ -102,7 +103,7 @@ async fn handle_client(
102103
creation: erl_dist::node::Creation::random(),
103104
}
104105
};
105-
let (stream, peer_node) = handshake.execute_rest(status).await?;
106+
let (stream, peer_node) = handshake.execute_rest(status).await.or_fail()?;
106107
println!("Connected: {:?}", peer_node);
107108

108109
let (mut tx, rx) = erl_dist::message::channel(stream, local_node.flags & peer_node.flags);
@@ -116,7 +117,7 @@ async fn handle_client(
116117
.await;
117118
match result {
118119
futures::future::Either::Left((result, _)) => {
119-
let (msg, rx) = result?;
120+
let (msg, rx) = result.or_fail()?;
120121
println!("Recv: {:?}", msg);
121122
msg_future = Box::pin(rx.recv_owned());
122123
}
@@ -126,7 +127,7 @@ async fn handle_client(
126127
}
127128

128129
if smol::future::poll_once(&mut timer).await.is_some() {
129-
tx.send(erl_dist::message::Message::Tick).await?;
130+
tx.send(erl_dist::message::Message::Tick).await.or_fail()?;
130131
timer.set_after(std::time::Duration::from_secs(30));
131132
}
132133
}

examples/send_msg.rs

Lines changed: 14 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99
//! $ cargo run --example send_msg -- --peer foo --destination foo --cookie erlang_cookie -m hello
1010
//! ```
1111
use clap::Parser;
12+
use orfail::OrFail;
1213

1314
#[derive(Debug, Parser)]
1415
#[clap(name = "send_msg")]
@@ -32,33 +33,37 @@ struct Args {
3233
impl Args {
3334
async fn peer_epmd_client(
3435
&self,
35-
) -> anyhow::Result<erl_dist::epmd::EpmdClient<smol::net::TcpStream>> {
36+
) -> orfail::Result<erl_dist::epmd::EpmdClient<smol::net::TcpStream>> {
3637
let addr = (self.peer_node.host(), erl_dist::epmd::DEFAULT_EPMD_PORT);
37-
let stream = smol::net::TcpStream::connect(addr).await?;
38+
let stream = smol::net::TcpStream::connect(addr).await.or_fail()?;
3839
Ok(erl_dist::epmd::EpmdClient::new(stream))
3940
}
4041
}
4142

42-
fn main() -> anyhow::Result<()> {
43+
fn main() -> orfail::Result<()> {
4344
let args = Args::parse();
4445
smol::block_on(async {
4546
let peer_node = args
4647
.peer_epmd_client()
4748
.await?
4849
.get_node(&args.peer_node.name())
49-
.await?
50-
.ok_or_else(|| anyhow::anyhow!("no such node: {}", args.peer_node))?;
50+
.await
51+
.or_fail()?
52+
.or_fail()?;
5153
println!("Got peer node info: {:?}", peer_node);
5254

5355
let creation = erl_dist::node::Creation::random();
54-
let stream = smol::net::TcpStream::connect((args.peer_node.host(), peer_node.port)).await?;
56+
let stream = smol::net::TcpStream::connect((args.peer_node.host(), peer_node.port))
57+
.await
58+
.or_fail()?;
5559
let local_node = erl_dist::node::LocalNode::new(args.local_node.clone(), creation);
5660
let mut handshake =
5761
erl_dist::handshake::ClientSideHandshake::new(stream, local_node.clone(), &args.cookie);
5862
let _status = handshake
5963
.execute_send_name(erl_dist::LOWEST_DISTRIBUTION_PROTOCOL_VERSION)
60-
.await?;
61-
let (connection, peer_node) = handshake.execute_rest(true).await?;
64+
.await
65+
.or_fail()?;
66+
let (connection, peer_node) = handshake.execute_rest(true).await.or_fail()?;
6267
println!("Handshake finished: peer={:?}", peer_node);
6368

6469
let (mut tx, _) =
@@ -69,7 +74,7 @@ fn main() -> anyhow::Result<()> {
6974
eetf::Atom::from(args.destination),
7075
eetf::Atom::from(args.message).into(),
7176
);
72-
tx.send(msg).await?;
77+
tx.send(msg).await.or_fail()?;
7378

7479
Ok(())
7580
})

src/lib.rs

Lines changed: 11 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@
1111
//! # use smol::net::TcpStream;
1212
//! use erl_dist::epmd::{DEFAULT_EPMD_PORT, EpmdClient};
1313
//!
14-
//! # fn main() -> anyhow::Result<()> {
14+
//! # fn main() -> Result<(), Box<dyn std::error::Error>> {
1515
//! # smol::block_on(async {
1616
//! // Connect to the local EPMD.
1717
//! let connection = TcpStream::connect(("localhost", DEFAULT_EPMD_PORT)).await?;
@@ -38,7 +38,7 @@
3838
//! use erl_dist::term::{Atom, Pid};
3939
//! use erl_dist::message::{channel, Message};
4040
//!
41-
//! # fn main() -> anyhow::Result<()> {
41+
//! # fn main() -> Result<(), Box<dyn std::error::Error>> {
4242
//! # smol::block_on(async {
4343
//! // Connect to a peer node.
4444
//! let peer_host = "localhost";
@@ -96,6 +96,8 @@ pub const HIGHEST_DISTRIBUTION_PROTOCOL_VERSION: u16 = 6;
9696
mod tests {
9797
use std::process::{Child, Command};
9898

99+
use orfail::OrFail;
100+
99101
pub const COOKIE: &str = "test-cookie";
100102

101103
#[derive(Debug)]
@@ -104,14 +106,15 @@ mod tests {
104106
}
105107

106108
impl TestErlangNode {
107-
pub async fn new(name: &str) -> anyhow::Result<Self> {
109+
pub async fn new(name: &str) -> orfail::Result<Self> {
108110
let child = Command::new("erl")
109111
.args(&["-sname", name, "-noshell", "-setcookie", COOKIE])
110-
.spawn()?;
112+
.spawn()
113+
.or_fail()?;
111114
let start = std::time::Instant::now();
112115
loop {
113116
if let Ok(client) = try_epmd_client().await {
114-
if client.get_node(name).await?.is_some() {
117+
if client.get_node(name).await.or_fail()?.is_some() {
115118
break;
116119
}
117120
}
@@ -130,11 +133,12 @@ mod tests {
130133
}
131134
}
132135

133-
pub async fn try_epmd_client() -> anyhow::Result<crate::epmd::EpmdClient<smol::net::TcpStream>>
136+
pub async fn try_epmd_client() -> orfail::Result<crate::epmd::EpmdClient<smol::net::TcpStream>>
134137
{
135138
let client = smol::net::TcpStream::connect(("127.0.0.1", crate::epmd::DEFAULT_EPMD_PORT))
136139
.await
137-
.map(crate::epmd::EpmdClient::new)?;
140+
.map(crate::epmd::EpmdClient::new)
141+
.or_fail()?;
138142
Ok(client)
139143
}
140144

0 commit comments

Comments
 (0)