datex_core/dif/
reference.rs

1use 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}