* Copyright (c), Huawei Technologies Co., Ltd. 2025-2025. All rights reserved.
*/
use std::collections::HashMap;
use std::path::Path;
use serde::Deserialize;
use anyhow::Result;
pub mod loader;
pub mod validator;
pub mod generator;
#[derive(Debug, Deserialize)]
pub struct ModuleMeta {
#[serde(rename = "source_type")]
pub source_enum: String,
#[serde(rename = "target_variant")]
pub target_variant: String,
pub start: u32,
pub end: u32,
}
#[derive(Debug, Clone, Deserialize)]
pub struct ErrorItem {
pub code: u32,
pub en: String,
pub zh: String,
pub fields: Vec<String>,
}
#[derive(Debug, Deserialize)]
pub struct ErrorModule {
pub meta: ModuleMeta,
pub errors: HashMap<String, ErrorItem>,
}
pub type ModuleMap = HashMap<String, ErrorModule>;
static ERROR_FILE: &str = "/generated_errors/";
pub fn generate_error_modules(input_dir: &Path) -> Result<()> {
let config = loader::load_all_errors(input_dir)?;
validator::validate(&config)?;
generator::generate(&config)?;
Ok(())
}
#[macro_export]
macro_rules! include_error_module {
($name:ident) => {
pub mod $name {
include!(concat!(env!("OUT_DIR"), "/generated_errors/", stringify!($name), ".rs"));
}
};
}