hrobot 6.1.0

Unofficial Hetzner Robot API client
Documentation
use std::net::IpAddr;

use hrobot::AsyncRobot;
use tracing::info;
use tracing_test::traced_test;

mod common;

#[tokio::test]
#[traced_test]
async fn list_subnets() {
    let _ = dotenvy::dotenv().ok();

    let robot = AsyncRobot::default();
    let subnets = robot.list_subnets().await.unwrap();

    info!("{subnets:#?}");
}

#[tokio::test]
#[traced_test]
async fn get_subnets() {
    let _ = dotenvy::dotenv().ok();

    let robot = AsyncRobot::default();
    let subnets = robot.list_subnets().await.unwrap();
    info!("{subnets:#?}");

    let subnet = subnets
        .values()
        .into_iter()
        .find_map(|subnet| subnet.first());

    if let Some(subnet) = subnet {
        let subnet = robot.get_subnet(subnet.ip.addr()).await.unwrap();
        info!("{subnet:#?}");
    }
}

#[tokio::test]
#[traced_test]
async fn get_subnet_cancellation() {
    let _ = dotenvy::dotenv().ok();

    let robot = AsyncRobot::default();
    let subnets = robot.list_subnets().await.unwrap();
    info!("{subnets:#?}");

    let subnet = subnets
        .values()
        .into_iter()
        .filter_map(|subnet| subnet.first())
        .find_map(|subnet| match subnet.ip.addr() {
            IpAddr::V4(addr) => Some(addr),
            _ => None,
        });

    if let Some(subnet) = subnet {
        let cancellation = robot.get_subnet_cancellation(subnet).await.unwrap();
        info!("{cancellation:#?}");
    }
}