use std::collections::BTreeMap;
use crate::value::VmValue;
pub(crate) fn opt_str(options: &Option<BTreeMap<String, VmValue>>, key: &str) -> Option<String> {
options.as_ref()?.get(key).map(|v| v.display())
}
pub(crate) fn opt_int(options: &Option<BTreeMap<String, VmValue>>, key: &str) -> Option<i64> {
options.as_ref()?.get(key)?.as_int()
}
pub(crate) fn opt_float(options: &Option<BTreeMap<String, VmValue>>, key: &str) -> Option<f64> {
options.as_ref()?.get(key).and_then(|v| match v {
VmValue::Float(f) => Some(*f),
VmValue::Int(i) => Some(*i as f64),
_ => None,
})
}
pub(crate) fn opt_bool(options: &Option<BTreeMap<String, VmValue>>, key: &str) -> bool {
options
.as_ref()
.and_then(|o| o.get(key))
.map(|v| v.is_truthy())
.unwrap_or(false)
}