use rustc_version::{version, version_meta, Channel};

fn allow_features() -> Option<Vec<String>> {
    std::env::var("CARGO_ENCODED_RUSTFLAGS").ok().map(|args| {
        args.split('\u{001f}')
            .filter(|arg| arg.starts_with("-Zallow-features="))
            .map(|arg| arg.split('=').nth(1).unwrap())
            .flat_map(|features| features.split(','))
            .map(|f| f.to_owned())
            .collect()
    })
}

fn can_enable_proc_macro_diagnostic() -> bool {
    allow_features()
        .map(|f| f.iter().any(|f| dbg!(f) == "proc_macro_diagnostic"))
        .unwrap_or(true)
}

fn main() {
    let ver = version().unwrap();
    assert!(ver.major >= 1);

    match version_meta().unwrap().channel {
        Channel::Nightly | Channel::Dev if can_enable_proc_macro_diagnostic() => {
            println!("cargo:rustc-cfg=use_proc_macro_diagnostic");
        }
        _ => {}
    }
}
