mirror of
https://github.com/haexhub/haex-hub.git
synced 2025-12-17 06:30:50 +01:00
- Updated @haexhub/sdk dependency from 1.9.7 to 1.9.10 - Imported HAEXTENSION_METHODS and HAEXTENSION_EVENTS from SDK - Updated all handler files to use new nested method constants - Updated extensionMessageHandler to route using constants - Changed application.open routing in web handler - All method names now use haextension:subject:action schema
77 lines
2.4 KiB
Rust
77 lines
2.4 KiB
Rust
// src-tauri/generator/event_names.rs
|
|
use serde::Deserialize;
|
|
use std::collections::HashMap;
|
|
use std::env;
|
|
use std::fs::File;
|
|
use std::io::{BufReader, Write};
|
|
use std::path::Path;
|
|
|
|
#[derive(Debug, Deserialize)]
|
|
struct EventNames {
|
|
extension: HashMap<String, String>,
|
|
}
|
|
|
|
pub fn generate_event_names() {
|
|
let out_dir = env::var("OUT_DIR").expect("OUT_DIR ist nicht gesetzt.");
|
|
println!("Generiere Event-Namen nach {out_dir}");
|
|
let events_path = Path::new("../src/constants/eventNames.json");
|
|
let dest_path = Path::new(&out_dir).join("eventNames.rs");
|
|
|
|
let file = File::open(events_path).expect("Konnte eventNames.json nicht öffnen");
|
|
let reader = BufReader::new(file);
|
|
let events: EventNames =
|
|
serde_json::from_reader(reader).expect("Konnte eventNames.json nicht parsen");
|
|
|
|
let mut code = String::from(
|
|
r#"
|
|
// ==================================================================
|
|
// HINWEIS: Diese Datei wurde automatisch von build.rs generiert.
|
|
// Manuelle Änderungen werden bei der nächsten Kompilierung überschrieben!
|
|
// ==================================================================
|
|
|
|
"#,
|
|
);
|
|
|
|
// Extension Events
|
|
code.push_str("// --- Extension Events ---\n");
|
|
for (key, value) in &events.extension {
|
|
let const_name = format!("EVENT_EXTENSION_{}", to_screaming_snake_case(key));
|
|
code.push_str(&format!(
|
|
"pub const {}: &str = \"{}\";\n",
|
|
const_name, value
|
|
));
|
|
}
|
|
code.push('\n');
|
|
|
|
// --- Datei schreiben ---
|
|
let mut f = File::create(&dest_path).expect("Konnte Zieldatei nicht erstellen");
|
|
f.write_all(code.as_bytes())
|
|
.expect("Konnte nicht in Zieldatei schreiben");
|
|
|
|
println!("cargo:rerun-if-changed=../src/constants/eventNames.json");
|
|
}
|
|
|
|
/// Konvertiert einen String zu SCREAMING_SNAKE_CASE
|
|
fn to_screaming_snake_case(s: &str) -> String {
|
|
let mut result = String::new();
|
|
let mut prev_is_lower = false;
|
|
|
|
for (i, ch) in s.chars().enumerate() {
|
|
if ch == '_' {
|
|
result.push('_');
|
|
prev_is_lower = false;
|
|
} else if ch.is_uppercase() {
|
|
if i > 0 && prev_is_lower {
|
|
result.push('_');
|
|
}
|
|
result.push(ch);
|
|
prev_is_lower = false;
|
|
} else {
|
|
result.push(ch.to_ascii_uppercase());
|
|
prev_is_lower = true;
|
|
}
|
|
}
|
|
|
|
result
|
|
}
|