Remove dependency on anyhow

This commit is contained in:
Joscha 2022-08-18 15:41:59 +02:00
parent c4bde36f40
commit f2cc06b147
2 changed files with 17 additions and 16 deletions

View file

@ -4,7 +4,6 @@ version = "0.1.0"
edition = "2021" edition = "2021"
[dependencies] [dependencies]
anyhow = "1.0.62" # TODO Remove
futures = "0.3.23" futures = "0.3.23"
rand = "0.8.5" rand = "0.8.5"
serde = { version = "1.0.143", features = ["derive"] } serde = { version = "1.0.143", features = ["derive"] }

View file

@ -4,9 +4,9 @@
use std::collections::HashMap; use std::collections::HashMap;
use std::convert::Infallible; use std::convert::Infallible;
use std::error;
use std::time::Duration; use std::time::Duration;
use anyhow::bail;
use futures::channel::oneshot; use futures::channel::oneshot;
use futures::stream::{SplitSink, SplitStream}; use futures::stream::{SplitSink, SplitStream};
use futures::{SinkExt, StreamExt}; use futures::{SinkExt, StreamExt};
@ -42,6 +42,8 @@ pub enum Error {
Euph(String), Euph(String),
} }
type InternalResult<T> = Result<T, Box<dyn error::Error>>;
#[derive(Debug)] #[derive(Debug)]
enum Event { enum Event {
Message(tungstenite::Message), Message(tungstenite::Message),
@ -72,18 +74,18 @@ pub struct Joining {
} }
impl Joining { impl Joining {
fn on_data(&mut self, data: &Data) -> anyhow::Result<()> { fn on_data(&mut self, data: &Data) -> InternalResult<()> {
match data { match data {
Data::BounceEvent(p) => self.bounce = Some(p.clone()), Data::BounceEvent(p) => self.bounce = Some(p.clone()),
Data::HelloEvent(p) => self.hello = Some(p.clone()), Data::HelloEvent(p) => self.hello = Some(p.clone()),
Data::SnapshotEvent(p) => self.snapshot = Some(p.clone()), Data::SnapshotEvent(p) => self.snapshot = Some(p.clone()),
d @ (Data::JoinEvent(_) Data::JoinEvent(_)
| Data::NetworkEvent(_) | Data::NetworkEvent(_)
| Data::NickEvent(_) | Data::NickEvent(_)
| Data::EditMessageEvent(_) | Data::EditMessageEvent(_)
| Data::PartEvent(_) | Data::PartEvent(_)
| Data::PmInitiateEvent(_) | Data::PmInitiateEvent(_)
| Data::SendEvent(_)) => bail!("unexpected {}", d.packet_type()), | Data::SendEvent(_) => return Err("unexpected packet type".into()),
_ => {} _ => {}
} }
Ok(()) Ok(())
@ -211,14 +213,14 @@ impl State {
async fn listen( async fn listen(
ws_rx: &mut SplitStream<WsStream>, ws_rx: &mut SplitStream<WsStream>,
event_tx: &mpsc::UnboundedSender<Event>, event_tx: &mpsc::UnboundedSender<Event>,
) -> anyhow::Result<()> { ) -> InternalResult<()> {
while let Some(msg) = ws_rx.next().await { while let Some(msg) = ws_rx.next().await {
event_tx.send(Event::Message(msg?))?; event_tx.send(Event::Message(msg?))?;
} }
Ok(()) Ok(())
} }
async fn send_ping_events(event_tx: &mpsc::UnboundedSender<Event>) -> anyhow::Result<()> { async fn send_ping_events(event_tx: &mpsc::UnboundedSender<Event>) -> InternalResult<()> {
loop { loop {
event_tx.send(Event::DoPings)?; event_tx.send(Event::DoPings)?;
time::sleep(TIMEOUT).await; time::sleep(TIMEOUT).await;
@ -229,7 +231,7 @@ impl State {
&mut self, &mut self,
event_tx: &mpsc::UnboundedSender<Event>, event_tx: &mpsc::UnboundedSender<Event>,
event_rx: &mut mpsc::UnboundedReceiver<Event>, event_rx: &mut mpsc::UnboundedReceiver<Event>,
) -> anyhow::Result<()> { ) -> InternalResult<()> {
while let Some(ev) = event_rx.recv().await { while let Some(ev) = event_rx.recv().await {
self.replies.purge(); self.replies.purge();
match ev { match ev {
@ -247,10 +249,10 @@ impl State {
&mut self, &mut self,
msg: tungstenite::Message, msg: tungstenite::Message,
event_tx: &mpsc::UnboundedSender<Event>, event_tx: &mpsc::UnboundedSender<Event>,
) -> anyhow::Result<()> { ) -> InternalResult<()> {
match msg { match msg {
tungstenite::Message::Text(t) => self.on_packet(serde_json::from_str(&t)?, event_tx)?, tungstenite::Message::Text(t) => self.on_packet(serde_json::from_str(&t)?, event_tx)?,
tungstenite::Message::Binary(_) => bail!("unexpected binary message"), tungstenite::Message::Binary(_) => return Err("unexpected binary message".into()),
tungstenite::Message::Ping(_) => {} tungstenite::Message::Ping(_) => {}
tungstenite::Message::Pong(p) => self.last_ws_pong = Some(p), tungstenite::Message::Pong(p) => self.last_ws_pong = Some(p),
tungstenite::Message::Close(_) => {} tungstenite::Message::Close(_) => {}
@ -263,7 +265,7 @@ impl State {
&mut self, &mut self,
packet: Packet, packet: Packet,
event_tx: &mpsc::UnboundedSender<Event>, event_tx: &mpsc::UnboundedSender<Event>,
) -> anyhow::Result<()> { ) -> InternalResult<()> {
let packet = ParsedPacket::from_packet(packet)?; let packet = ParsedPacket::from_packet(packet)?;
// Complete pending replies if the packet has an id // Complete pending replies if the packet has an id
@ -309,7 +311,7 @@ impl State {
&mut self, &mut self,
data: Data, data: Data,
reply_tx: oneshot::Sender<PendingReply<Result<Data, String>>>, reply_tx: oneshot::Sender<PendingReply<Result<Data, String>>>,
) -> anyhow::Result<()> { ) -> InternalResult<()> {
// Overkill of universe-heat-death-like proportions // Overkill of universe-heat-death-like proportions
self.last_id = self.last_id.wrapping_add(1); self.last_id = self.last_id.wrapping_add(1);
let id = format!("{}", self.last_id); let id = format!("{}", self.last_id);
@ -330,7 +332,7 @@ impl State {
Ok(()) Ok(())
} }
async fn on_send_rpl(&mut self, id: Option<String>, data: Data) -> anyhow::Result<()> { async fn on_send_rpl(&mut self, id: Option<String>, data: Data) -> InternalResult<()> {
let packet = ParsedPacket { let packet = ParsedPacket {
id, id,
r#type: data.packet_type(), r#type: data.packet_type(),
@ -349,10 +351,10 @@ impl State {
let _ = reply_tx.send(self.status.clone()); let _ = reply_tx.send(self.status.clone());
} }
async fn do_pings(&mut self, event_tx: &mpsc::UnboundedSender<Event>) -> anyhow::Result<()> { async fn do_pings(&mut self, event_tx: &mpsc::UnboundedSender<Event>) -> InternalResult<()> {
// Check old ws ping // Check old ws ping
if self.last_ws_ping.is_some() && self.last_ws_ping != self.last_ws_pong { if self.last_ws_ping.is_some() && self.last_ws_ping != self.last_ws_pong {
bail!("server missed ws ping") return Err("server missed ws ping".into());
} }
// Send new ws ping // Send new ws ping
@ -365,7 +367,7 @@ impl State {
// Check old euph ping // Check old euph ping
if self.last_euph_ping.is_some() && self.last_euph_ping != self.last_euph_pong { if self.last_euph_ping.is_some() && self.last_euph_ping != self.last_euph_pong {
bail!("server missed euph ping") return Err("server missed euph ping".into());
} }
// Send new euph ping // Send new euph ping