tailscale-localapi 0.5.0

Client for the Tailscale local API
Documentation
use std::{fs, path::PathBuf, str};

const DIR: &str = "/Library/Tailscale";

fn port_and_password() -> (u16, String) {
    let dir = PathBuf::from(DIR);

    let port_path = dir.join("ipnport");
    let port = fs::read_link(port_path)
        .unwrap()
        .to_string_lossy()
        .parse()
        .unwrap();
    let password_path = dir.join(format!("sameuserproof-{port}"));
    let password = fs::read_to_string(password_path)
        .unwrap()
        .trim_end()
        .to_string();

    (port, password)
}

async fn run() {
    let (port, password) = port_and_password();
    let client = tailscale_localapi::LocalApi::new_with_port_and_password(port, password);

    dbg!(client.status().await.unwrap());
}

fn main() {
    let rt = tokio::runtime::Builder::new_current_thread()
        .enable_all()
        .build()
        .unwrap();
    rt.block_on(run());
}