Skip to main content

datex_core/dif/
reference.rs

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