auraline 0.14.0

utility that renders information into a string suitable to be embedded in the shell prompt.
use smol_str::SmolStr;

use crate::{chunk::Chunk, options::Options};

#[cfg(target_os = "linux")]
fn identify_netns() -> Option<SmolStr> {
    use std::os::unix::fs::MetadataExt;

    let self_meta = std::fs::metadata("/proc/self/ns/net").ok()?;
    let self_dev = self_meta.dev();
    let self_ino = self_meta.ino();

    let entries = std::fs::read_dir("/run/netns")
        .or_else(|_| std::fs::read_dir("/var/run/netns"))
        .ok()?;

    for entry in entries.flatten() {
        if let Ok(meta) = entry.metadata() {
            if meta.dev() == self_dev && meta.ino() == self_ino {
                if let Some(name) = entry.file_name().to_str() {
                    return Some(SmolStr::new(name));
                }
            }
        }
    }

    None
}

#[cfg(not(target_os = "linux"))]
fn identify_netns() -> Option<SmolStr> {
    None
}

pub async fn show(opts: &Options) -> Option<Chunk<SmolStr>> {
    if !opts.netns {
        return None;
    }
    identify_netns().map(|s| Chunk::new(opts.select_str("{}", ""), s))
}