luaur_analysis/methods/
stringifier_state_emit_primitives.rs1use crate::records::stringifier_state::StringifierState;
6use crate::records::type_level::TypeLevel;
7use alloc::string::{String, ToString};
8
9pub trait EmitText {
10 fn emit_text(&self, state: &mut StringifierState);
11}
12
13impl StringifierState {
14 pub fn emit<T: EmitText + ?Sized>(&mut self, value: &T) {
16 value.emit_text(self);
17 }
18
19 fn emit_str_raw(&mut self, s: &str) {
20 unsafe {
21 let opts = &*self.opts;
23 let result = &mut *self.result;
24 if opts.max_type_length > 0 && result.name.len() > opts.max_type_length as usize {
25 return;
26 }
27 result.name.push_str(s);
28 }
29 }
30}
31
32impl EmitText for str {
33 fn emit_text(&self, state: &mut StringifierState) {
34 state.emit_str_raw(self);
35 }
36}
37impl EmitText for String {
38 fn emit_text(&self, state: &mut StringifierState) {
39 state.emit_str_raw(self);
40 }
41}
42impl EmitText for TypeLevel {
43 fn emit_text(&self, state: &mut StringifierState) {
44 state.emit_str_raw(&self.level.to_string());
45 state.emit_str_raw("-");
46 state.emit_str_raw(&self.subLevel.to_string());
47 }
48}
49macro_rules! emit_int {
50 ($($t:ty),*) => {$(
51 impl EmitText for $t {
52 fn emit_text(&self, state: &mut StringifierState) {
53 state.emit_str_raw(&self.to_string());
54 }
55 }
56 )*};
57}
58emit_int!(i32, i64, u32, u64, usize, isize);