anyscript_compiler/types/
tuple.rs

1//! Tuple type for the lexer
2//! 
3//! This Class Provides a Tuple Type
4
5use std::fmt::Display;
6use std::default::Default;
7use std::ffi::CString;
8
9#[derive(Clone)]
10pub struct Tuple<T1: Default + Display + Clone + Send + Sync, T2: Default + Display + Clone + Send + Sync> {
11    pub first: T1,
12    pub second: T2,
13    pub tuple: (T1, T2),
14}
15
16impl<T1: Default + Display + Clone + Send + Sync, T2: Default + Display + Clone + Send + Sync> Default for Tuple<T1, T2> {
17    fn default() -> Self {
18        Self::new()
19    }
20}
21
22impl<T1: Default + Display + Clone + Send + Sync, T2: Default + Display + Clone + Send + Sync> Tuple<T1, T2> {
23
24    /// Create a new tuple with default values
25    pub fn new() -> Self {
26        let first = T1::default();
27        let second = T2::default();
28        Self {
29            first: first.clone(),
30            second: second.clone(),
31            tuple: (first, second),
32        }
33    }
34
35    /// Set the first value
36    pub fn set_first(&mut self, first: T1) {
37        self.first = first.clone();
38        self.tuple = (first, self.second.clone());
39    }
40
41    /// Set the second value
42    pub fn set_second(&mut self, second: T2) {
43        self.second = second.clone();
44        self.tuple = (self.first.clone(), second);
45    }
46
47    pub fn get_first(&self) -> T1 {
48        self.first.clone()
49    }
50
51    pub fn get_second(&self) -> T2 {
52        self.second.clone()
53    }
54
55    pub fn first_to_str(&self) -> String {
56        self.first.to_string()
57    }
58
59    pub fn second_to_str(&self) -> String {
60        self.second.to_string()
61    }
62
63    pub fn first_to_cstr(&self) -> CString {
64        CString::new(self.first.to_string()).unwrap()
65    }
66
67    pub fn second_to_cstr(&self) -> CString {
68        CString::new(self.second.to_string()).unwrap()
69    }
70
71}