datex_core/dif/
reference.rs

1use crate::dif::r#type::DIFTypeContainer;
2use crate::references::reference::mutability_as_int;
3use crate::references::reference::{Reference, ReferenceMutability};
4use crate::runtime::memory::Memory;
5use datex_core::dif::value::DIFValueContainer;
6use serde::{Deserialize, Serialize};
7use std::cell::RefCell;
8#[derive(Clone, Debug, PartialEq, Serialize, Deserialize)]
9pub struct DIFReference {
10    pub value: DIFValueContainer,
11    pub allowed_type: DIFTypeContainer,
12    #[serde(rename = "mut")]
13    #[serde(with = "mutability_as_int")]
14    pub mutability: ReferenceMutability,
15}
16
17impl DIFReference {
18    pub fn from_reference(
19        reference: &Reference,
20        memory: &RefCell<Memory>,
21    ) -> Self {
22        let value = DIFValueContainer::from_value_container(
23            &reference.value_container(),
24            memory,
25        );
26        let allowed_type = DIFTypeContainer::from_type_container(
27            &reference.allowed_type(),
28            memory,
29        );
30        DIFReference {
31            value,
32            allowed_type,
33            mutability: reference.mutability(),
34        }
35    }
36}