xuko-net 0.6.1

xuko's networking utilities
Documentation
#![allow(missing_docs)]
use serde::{Deserialize, Serialize};
use std::net::{TcpListener, TcpStream};
use xuko_net::packet::*;

#[derive(Debug, Serialize, Deserialize)]
enum ExamplePacket {
    GetHardcodedValue,
    SendInfo(String),
}

const ADDRESS: &str = "127.0.0.1:30000";

fn main() -> Result<(), PacketError> {
    let args = std::env::args().collect::<Vec<_>>();

    if let Some(m) = args.get(1) {
        match m.trim().to_lowercase().as_str() {
            "server" => server(),
            _ => client(),
        }
    } else {
        client()
    }?;

    Ok(())
}

fn server() -> Result<(), PacketError> {
    let listener = TcpListener::bind(ADDRESS)?;

    while let Ok((mut stream, addr)) = listener.accept() {
        println!("request from: {addr}");

        let packet = chomp_packet(&mut stream)?;
        println!("received packet: {packet}");

        let parsed = Packet::<ExamplePacket>::deserialize(&packet)?.unwrap();

        match parsed {
            ExamplePacket::GetHardcodedValue => unreachable!(),
            ExamplePacket::SendInfo(s) => println!("This is what the packet contained: {s}"),
        }
    }

    Ok(())
}

fn client() -> Result<(), PacketError> {
    let mut stream = TcpStream::connect(ADDRESS)?;

    Packet::new(ExamplePacket::SendInfo("Hello!".to_string())).send(&mut stream)?;

    Ok(())
}