datex_core/dif/
reference.rs1use 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}