// Generated by mix skia.codegen. Do not edit by hand.
fn decode_opts<'a>(term: Term<'a>) -> NifResult<Vec<(Atom, Term<'a>)>> {
term.map_get(atoms::opts())?.decode::<Vec<(Atom, Term<'a>)>>()
}
fn opt_term<'a>(opts: &[(Atom, Term<'a>)], key: Atom) -> Option<Term<'a>> {
opts.iter().find_map(|(atom, term)| if *atom == key { Some(*term) } else { None })
}
fn opt_f32<'a>(opts: &[(Atom, Term<'a>)], key: Atom) -> NifResult<f32> {
opt_f32_default(opts, key, f32::NAN)
.and_then(|value| {
if value.is_nan() { Err(rustler::Error::BadArg) } else { Ok(value) }
})
}
fn opt_f32_option<'a>(opts: &[(Atom, Term<'a>)], key: Atom) -> NifResult<Option<f32>> {
match opt_term(opts, key) {
Some(term) => Ok(Some(term.decode::<f64>()? as f32)),
None => Ok(None),
}
}
fn opt_f32_default<'a>(
opts: &[(Atom, Term<'a>)],
key: Atom,
default: f32,
) -> NifResult<f32> {
match opt_term(opts, key) {
Some(term) => Ok(term.decode::<f64>()? as f32),
None => Ok(default),
}
}
fn opt_bool_option<'a>(opts: &[(Atom, Term<'a>)], key: Atom) -> NifResult<Option<bool>> {
match opt_term(opts, key) {
Some(term) => Ok(Some(term.decode::<bool>()?)),
None => Ok(None),
}
}
fn opt_atom_option<'a>(opts: &[(Atom, Term<'a>)], key: Atom) -> NifResult<Option<Atom>> {
match opt_term(opts, key) {
Some(term) => Ok(Some(term.decode::<Atom>()?)),
None => Ok(None),
}
}