simple-aprs 0.3.2

APRS Library to interact with APRS-IS servers
Documentation
extern crate pretty_env_logger;

use futures::stream::StreamExt;
use std::env;

use simple_aprs::*;

async fn aprs_packet_handler(packet: RawPacket) {
    match packet.parsed() {
        Ok(parsed) => {
            println!("Source: {}", parsed.from);
            if let Some(to) = parsed.to() {
                println!("Destination: {}", to);
            }
        }
        Err(err) => {
            println!("Error parsing packet: {}", err);
            match String::from_utf8(packet.raw) {
                Ok(msg) => println!("{:?}", msg),
                Err(err) => println!("Error converting APRS packet to UTF8: {}", err),
            }
        }
    }
}

#[tokio::main]
async fn main() {
    pretty_env_logger::init();

    let args = arguments::parse(env::args()).unwrap();

    let callsign = args.get::<String>("callsign").unwrap();
    let passcode = args.get::<String>("passcode").unwrap();

    let settings = ISSettings::new(
        "euro.aprs2.net".to_string(),
        14580,
        callsign.to_string(),
        passcode.to_string(),
        "r/55/-4/600".to_string(),
    );

    let mut aprs_is = ISConnection::connect(&settings)
        .await
        .expect("An error occurred while connecting");

    aprs_is
        .stream()
        .for_each(|x| aprs_packet_handler(x.expect("Error occurred while receiving packets")))
        .await;
}