Skip to main content

native/oxc_ex_nif/src/generated_term_helpers.rs

// This file is generated by RustQ. Do not edit by hand.

fn get<'a>(term: Term<'a>, key: rustler::Atom) -> Option<Term<'a>> {
    term.map_get(key).ok()
}
fn is_nil(term: Term) -> bool {
    term.is_atom() && term.atom_to_string().ok().as_deref() == Some("nil")
}
fn opt<'a>(term: Term<'a>, key: rustler::Atom) -> Option<Term<'a>> {
    get(term, key).filter(|t| !is_nil(*t))
}
fn str_val<'a>(term: Term<'a>, key: rustler::Atom) -> String {
    match get(term, key) {
        Some(t) => {
            t.decode::<String>().or_else(|_| t.atom_to_string()).unwrap_or_default()
        }
        None => String::new(),
    }
}
fn bool_val(term: Term, key: rustler::Atom) -> bool {
    get(term, key).and_then(|t| t.decode::<bool>().ok()).unwrap_or(false)
}
fn f64_val(term: Term, key: rustler::Atom) -> f64 {
    get(term, key)
        .and_then(|t| {
            t.decode::<f64>().ok().or_else(|| t.decode::<i64>().ok().map(|i| i as f64))
        })
        .unwrap_or(0.0)
}
fn list_val<'a>(term: Term<'a>, key: rustler::Atom) -> Vec<Term<'a>> {
    get(term, key).and_then(|t| t.decode::<Vec<Term>>().ok()).unwrap_or_default()
}
fn type_atom(term: Term) -> Option<rustler::Atom> {
    get(term, a::r#type()).and_then(|t| t.decode::<rustler::Atom>().ok())
}
fn type_eq(term: Term, expected: rustler::Atom) -> bool {
    type_atom(term) == Some(expected)
}
fn type_str(term: Term) -> String {
    get(term, a::r#type())
        .and_then(|t| t.atom_to_string().ok())
        .unwrap_or_else(|| "<no type>".into())
}