librojo/
rojo_ref.rs

1use std::{fmt, sync::Arc};
2
3use serde::{Deserialize, Serialize};
4
5pub const REF_ID_ATTRIBUTE_NAME: &str = "Rojo_Id";
6pub const REF_POINTER_ATTRIBUTE_PREFIX: &str = "Rojo_Target_";
7
8// TODO add an internment strategy for RojoRefs
9// Something like what rbx-dom does for SharedStrings probably works
10
11#[derive(Debug, Default, PartialEq, Hash, Clone, Serialize, Deserialize, Eq)]
12pub struct RojoRef(Arc<String>);
13
14impl RojoRef {
15    #[inline]
16    pub fn new(id: String) -> Self {
17        Self(Arc::from(id))
18    }
19
20    #[inline]
21    pub fn as_str(&self) -> &str {
22        self.0.as_str()
23    }
24}
25
26impl fmt::Display for RojoRef {
27    fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
28        write!(f, "{}", self.as_str())
29    }
30}