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