diff --git a/Cargo.toml b/Cargo.toml index a447159..66570da 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -4,3 +4,5 @@ version = "0.1.0" edition = "2024" [dependencies] +thiserror = "2.0.18" +## Make it easier to generate errors diff --git a/src/lib.rs b/src/lib.rs index 8f03d07..d7f1e62 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -1,2 +1,23 @@ -#[derive(Default)] -pub struct Peer {} +use std::net::{SocketAddr, UdpSocket}; + +use thiserror::*; + +#[derive(Error, Debug)] +pub enum PeerError { + #[error("Error binding to port: {0}")] + BindError(std::io::Error), +} + +pub struct Peer { + socket: UdpSocket, +} + +impl Peer { + /// Bind given port to listen to incoming messages. Creates a new Peer that + /// can establish new connections. + pub fn listen(port: Option) -> Result { + let socket = UdpSocket::bind(SocketAddr::from(([0, 0, 0, 0], port.unwrap_or(0)))) + .map_err(|e| PeerError::BindError(e))?; + Ok(Peer { socket }) + } +}