Skip to content

Commit d310658

Browse files
committed
Implement anyhow::Result.
1 parent 2b7c730 commit d310658

File tree

10 files changed

+74
-72
lines changed

10 files changed

+74
-72
lines changed

Cargo.lock

Lines changed: 3 additions & 2 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

Cargo.toml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,3 +27,4 @@ prost = "0.11"
2727
pbjson-types = "0.5"
2828
prometheus = "0.13"
2929
lazy_static = "1.4"
30+
anyhow = "1.0"

src/commands.rs

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
1+
use anyhow::Result;
2+
13
use super::socket::ZMQ_CONTEXT;
24

3-
pub fn get_socket(endpoint: &str) -> Result<zmq::Socket, zmq::Error> {
5+
pub fn get_socket(endpoint: &str) -> Result<zmq::Socket> {
46
info!(
57
"Creating new socket for sending commands, endpoint: {}",
68
endpoint

src/config.rs

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
use std::fs;
22

3+
use anyhow::Result;
34
use serde::Deserialize;
45

56
pub const VERSION: &str = env!("CARGO_PKG_VERSION");
@@ -33,19 +34,19 @@ pub struct Configuration {
3334
}
3435

3536
impl Configuration {
36-
pub fn get(filenames: &[String]) -> Result<Configuration, String> {
37+
pub fn get(filenames: &[String]) -> Result<Configuration> {
3738
let mut content: String = String::new();
3839

3940
for file_name in filenames {
4041
content.push_str(&match fs::read_to_string(file_name) {
4142
Ok(v) => v,
42-
Err(err) => return Err(format!("read config file error: {}", err)),
43+
Err(err) => return Err(anyhow!("read config file error: {}", err)),
4344
});
4445
}
4546

4647
let config: Configuration = match toml::from_str(&content) {
4748
Ok(v) => v,
48-
Err(err) => return Err(format!("parse config file error: {}", err)),
49+
Err(err) => return Err(anyhow!("parse config file error: {}", err)),
4950
};
5051

5152
Ok(config)

src/events.rs

Lines changed: 11 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
use std::time::Duration;
22

3+
use anyhow::Result;
34
use prost::Message;
45

56
use super::socket::ZMQ_CONTEXT;
@@ -60,44 +61,35 @@ impl Iterator for Reader<'_> {
6061
let msg = self.sub_sock.recv_multipart(0).unwrap();
6162
match handle_message(msg) {
6263
Ok(v) => Some(v),
63-
Err(err) => Some(Event::Error(err)),
64+
Err(err) => Some(Event::Error(err.to_string())),
6465
}
6566
}
6667
}
6768

68-
fn handle_message(msg: Vec<Vec<u8>>) -> Result<Event, String> {
69+
fn handle_message(msg: Vec<Vec<u8>>) -> Result<Event> {
6970
if msg.len() != 2 {
70-
return Err("event must have two frames".to_string());
71+
return Err(anyhow!("Event must have two frames"));
7172
}
7273

73-
let event = match String::from_utf8(msg[0].clone()) {
74-
Ok(v) => v,
75-
Err(err) => return Err(err.to_string()),
76-
};
74+
let event = String::from_utf8(msg[0].clone())?;
7775

7876
Ok(match event.as_str() {
7977
"up" => match parse_up(&msg[1]) {
8078
Ok(v) => Event::Uplink(Box::new(v)),
81-
Err(err) => Event::Error(err),
79+
Err(err) => Event::Error(err.to_string()),
8280
},
8381
"stats" => match parse_stats(&msg[1]) {
8482
Ok(v) => Event::Stats(Box::new(v)),
85-
Err(err) => Event::Error(err),
83+
Err(err) => Event::Error(err.to_string()),
8684
},
8785
_ => Event::Unknown(event, msg[1].clone()),
8886
})
8987
}
9088

91-
fn parse_up(msg: &[u8]) -> Result<chirpstack_api::gw::UplinkFrame, String> {
92-
match chirpstack_api::gw::UplinkFrame::decode(msg) {
93-
Ok(v) => Ok(v),
94-
Err(err) => Err(err.to_string()),
95-
}
89+
fn parse_up(msg: &[u8]) -> Result<chirpstack_api::gw::UplinkFrame> {
90+
Ok(chirpstack_api::gw::UplinkFrame::decode(msg)?)
9691
}
9792

98-
fn parse_stats(msg: &[u8]) -> Result<chirpstack_api::gw::GatewayStats, String> {
99-
match chirpstack_api::gw::GatewayStats::decode(msg) {
100-
Ok(v) => Ok(v),
101-
Err(err) => Err(err.to_string()),
102-
}
93+
fn parse_stats(msg: &[u8]) -> Result<chirpstack_api::gw::GatewayStats> {
94+
Ok(chirpstack_api::gw::GatewayStats::decode(msg)?)
10395
}

src/forwarder.rs

Lines changed: 8 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ use std::sync::mpsc::Receiver;
33
use std::sync::{Arc, Mutex};
44
use std::{thread, time};
55

6+
use anyhow::Result;
67
use prost::Message;
78
use rand::Rng;
89

@@ -409,7 +410,7 @@ fn events_up(state: &Arc<State>, up: chirpstack_api::gw::UplinkFrame) {
409410
metrics::incr_udp_sent_bytes(&state.server, "PUSH_DATA_RXPK", bytes.len());
410411
}
411412

412-
fn handle_push_ack(state: &Arc<State>, data: &[u8]) -> Result<(), String> {
413+
fn handle_push_ack(state: &Arc<State>, data: &[u8]) -> Result<()> {
413414
let push_ack = structs::PushAck::from_bytes(data)?;
414415
let expected_token = state.get_push_data_token();
415416

@@ -425,7 +426,7 @@ fn handle_push_ack(state: &Arc<State>, data: &[u8]) -> Result<(), String> {
425426
Ok(())
426427
}
427428

428-
fn handle_pull_ack(state: &Arc<State>, data: &[u8]) -> Result<(), String> {
429+
fn handle_pull_ack(state: &Arc<State>, data: &[u8]) -> Result<()> {
429430
let push_ack = structs::PullAck::from_bytes(data)?;
430431
let expected_token = state.get_pull_data_token();
431432
state.set_pull_data_token_acked(push_ack.random_token);
@@ -440,7 +441,7 @@ fn handle_pull_ack(state: &Arc<State>, data: &[u8]) -> Result<(), String> {
440441
Ok(())
441442
}
442443

443-
fn handle_pull_resp(state: &Arc<State>, data: &[u8]) -> Result<(), String> {
444+
fn handle_pull_resp(state: &Arc<State>, data: &[u8]) -> Result<()> {
444445
let pull_resp = structs::PullResp::from_bytes(data)?;
445446
let sock = state.command_sock.lock().unwrap();
446447

@@ -451,7 +452,7 @@ fn handle_pull_resp(state: &Arc<State>, data: &[u8]) -> Result<(), String> {
451452
{
452453
Ok(v) => v,
453454
Err(err) => {
454-
return Err(format!("TxPk to proto error: {}", err));
455+
return Err(anyhow!("TxPk to proto error: {}", err));
455456
}
456457
};
457458

@@ -466,15 +467,15 @@ fn handle_pull_resp(state: &Arc<State>, data: &[u8]) -> Result<(), String> {
466467
let mut items = [sock.as_poll_item(zmq::POLLIN)];
467468
zmq::poll(&mut items, 100).unwrap();
468469
if !items[0].is_readable() {
469-
return Err("could not read down response".to_string());
470+
return Err(anyhow!("could not read down response"));
470471
}
471472

472473
// read tx ack response.
473474
let resp_b: &[u8] = &sock.recv_bytes(0).unwrap();
474475
let tx_ack = match chirpstack_api::gw::DownlinkTxAck::decode(resp_b) {
475476
Ok(v) => v,
476477
Err(err) => {
477-
return Err(format!("decode DownlinkTxAck error: {}", err));
478+
return Err(anyhow!("decode DownlinkTxAck error: {}", err));
478479
}
479480
};
480481

@@ -490,7 +491,7 @@ fn handle_pull_resp(state: &Arc<State>, data: &[u8]) -> Result<(), String> {
490491
txpk_ack: structs::TxAckPayloadError {
491492
error: {
492493
if tx_ack.items.len() != 1 {
493-
return Err("".to_string());
494+
return Err(anyhow!(""));
494495
}
495496

496497
match tx_ack.items[0].status() {

src/helpers.rs

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
1+
use anyhow::Result;
2+
13
use super::commands;
24

3-
pub fn get_gateway_id(command_url: &str) -> Result<Vec<u8>, String> {
5+
pub fn get_gateway_id(command_url: &str) -> Result<Vec<u8>> {
46
debug!("Reading gateway id, server: {}", command_url);
57

68
let sock = commands::get_socket(command_url).expect("get client error");
@@ -13,7 +15,7 @@ pub fn get_gateway_id(command_url: &str) -> Result<Vec<u8>, String> {
1315
let mut items = [sock.as_poll_item(zmq::POLLIN)];
1416
zmq::poll(&mut items, 100).unwrap();
1517
if !items[0].is_readable() {
16-
return Err("could not read gateway_id".to_string());
18+
return Err(anyhow!("could not read gateway_id"));
1719
}
1820

1921
// read 'gateway_id' response

src/logging.rs

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,9 @@
11
use std::process;
22

3+
use anyhow::Result;
34
use syslog::{BasicLogger, Facility, Formatter3164};
45

5-
pub fn setup(name: &str, level: log::Level, syslog: bool) -> Result<(), String> {
6+
pub fn setup(name: &str, level: log::Level, syslog: bool) -> Result<()> {
67
if syslog {
78
let formatter = Formatter3164 {
89
facility: Facility::LOG_USER,
@@ -12,7 +13,7 @@ pub fn setup(name: &str, level: log::Level, syslog: bool) -> Result<(), String>
1213
};
1314
let logger = match syslog::unix(formatter) {
1415
Ok(v) => v,
15-
Err(err) => return Err(format!("create syslog logger error: {}", err)),
16+
Err(err) => return Err(anyhow!("create syslog logger error: {}", err)),
1617
};
1718

1819
log::set_boxed_logger(Box::new(BasicLogger::new(logger)))

src/main.rs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,8 @@
22
extern crate lazy_static;
33
#[macro_use]
44
extern crate log;
5+
#[macro_use]
6+
extern crate anyhow;
57

68
use std::str::FromStr;
79
use std::thread;

0 commit comments

Comments
 (0)