anyscript_compiler/types/
tuple.rs1use 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 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 pub fn set_first(&mut self, first: T1) {
37 self.first = first.clone();
38 self.tuple = (first, self.second.clone());
39 }
40
41 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}