|
| 1 | +use serde_json::{json, Value}; |
| 2 | +use std::collections::HashMap; |
| 3 | + |
| 4 | +#[allow(dead_code)] |
| 5 | +/// JSON text format parser (unused) |
| 6 | +pub fn format_motd(motd: &str) -> Value { |
| 7 | + let color_map = HashMap::from([ |
| 8 | + ('0', "black"), ('1', "dark_blue"), ('2', "dark_green"), ('3', "dark_aqua"), |
| 9 | + ('4', "dark_red"), ('5', "dark_purple"), ('6', "gold"), ('7', "gray"), |
| 10 | + ('8', "dark_gray"), ('9', "blue"), ('a', "green"), ('b', "aqua"), |
| 11 | + ('c', "red"), ('d', "light_purple"), ('e', "yellow"), ('f', "white") |
| 12 | + ]); |
| 13 | + let style_map = HashMap::from([ |
| 14 | + ('k', "obfuscated"), ('l', "bold"), ('m', "strikethrough"), |
| 15 | + ('n', "underlined"), ('o', "italic"), ('r', "reset") |
| 16 | + ]); |
| 17 | + |
| 18 | + let mut json_array = Vec::new(); |
| 19 | + let mut current_text = String::new(); |
| 20 | + let mut current_json = json!({}); |
| 21 | + |
| 22 | + let chars: Vec<char> = motd.chars().collect(); |
| 23 | + let mut i = 0; |
| 24 | + |
| 25 | + while i < chars.len() { |
| 26 | + if chars[i] == '§' && i + 1 < chars.len() { |
| 27 | + if !current_text.is_empty() { |
| 28 | + current_json["text"] = Value::String(current_text.clone()); |
| 29 | + json_array.push(current_json); |
| 30 | + current_text.clear(); |
| 31 | + current_json = json!({}); |
| 32 | + } |
| 33 | + |
| 34 | + let format_char = chars[i + 1]; |
| 35 | + if let Some(color) = color_map.get(&format_char) { |
| 36 | + current_json["color"] = Value::String(color.to_string()); |
| 37 | + } else if let Some(style) = style_map.get(&format_char) { |
| 38 | + current_json[style] = Value::Bool(true); |
| 39 | + } |
| 40 | + |
| 41 | + i += 2; |
| 42 | + } else { |
| 43 | + current_text.push(chars[i]); |
| 44 | + i += 1; |
| 45 | + } |
| 46 | + } |
| 47 | + |
| 48 | + if !current_text.is_empty() { |
| 49 | + current_json["text"] = Value::String(current_text); |
| 50 | + json_array.push(current_json); |
| 51 | + } |
| 52 | + |
| 53 | + Value::Array(json_array) |
| 54 | +} |
0 commit comments