bridge_adapters/lisp_adapters/
collections.rs

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
use crate::lisp_adapters::{SlFromRef, SlFromRefMut};
use bridge_types::ErrorStrings;
use compile_state::state::SloshVm;
use slvm::vm_hashmap::VMHashMap;
use slvm::{VMError, VMResult, Value, ValueType};

impl<'a> SlFromRef<'a, Value> for &'a VMHashMap {
    fn sl_from_ref(value: Value, vm: &'a SloshVm) -> VMResult<Self> {
        match value {
            Value::Map(h) => Ok(vm.get_map(h)),
            _ => Err(VMError::new_conversion(
                ErrorStrings::fix_me_mismatched_type(
                    <&'static str>::from(ValueType::Map),
                    value.display_type(vm),
                ),
            )),
        }
    }
}

impl<'a> SlFromRefMut<'a, Value> for &'a mut VMHashMap {
    fn sl_from_ref_mut(value: Value, vm: &'a mut SloshVm) -> VMResult<Self> {
        match value {
            Value::Map(h) => Ok(vm.get_map_mut(h)?),
            _ => Err(VMError::new_conversion(
                ErrorStrings::fix_me_mismatched_type(
                    <&'static str>::from(ValueType::Map),
                    value.display_type(vm),
                ),
            )),
        }
    }
}