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
use crate::core::{HashM, HashMt};
use crate::core::error::CoreResult;
use crate::core::imp::json_to_rust::names::Names;
use crate::core::imp::structs::ref_def_obj::RefDefObj;
use crate::core::imp::structs::ref_value::RefSabValue;
use crate::core::imp::structs::qv::Qv;

pub(crate) fn adjust_mut_list_item_ref(def : &RefDefObj, old_ref : HashM<String, RefSabValue>, _names : &Names) -> CoreResult<HashM<String, RefSabValue>>{
    let mut old_ref = old_ref;

    //事前に大きさが決定できないが、refのusecaseだとundefinedは少なく、default値のままが多いと思うので、sabunのlenを使う
    let mut result : HashM<String, RefSabValue> = HashMt::with_capacity(old_ref.len());

    for (def_key,_, def_v) in def.refs(){
        let sabun_v = if let Some(v) = old_ref.remove(def_key){ v } else {
            if def_v.var_type().undefiable(){
                RefSabValue::new(Qv::Undefined)
            } else{
                continue;
            }
        };
        result.insert(def_key.to_string(), sabun_v);
    }
    Ok(result)
}