cairo-lang-filesystem 2.18.0

Virtual filesystem for the compiler.
Documentation
use std::path::PathBuf;

pub fn detect_corelib() -> Option<PathBuf> {
    for (base, up_options) in [
        // This is the directory of Cargo.toml of the current crate.
        // This is used for development of the compiler.
        (std::env::var("CARGO_MANIFEST_DIR").ok().map(PathBuf::from), 1..=2),
        // This is the directory of the executable.
        (std::env::current_exe().ok(), 2..=4),
        // This is the current directory.
        (std::env::current_dir().ok(), 0..=0),
    ] {
        let Some(base) = base else { continue };
        for up in up_options {
            let mut path = base.clone();
            for _ in 0..up {
                path.pop();
            }
            path.push("corelib");
            path.push("src");
            if path.exists() {
                return Some(path);
            }
        }
    }
    None
}