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