dataforge/
lib.rs

1//! # DataForge 🔥🧪
2//! 
3//! 高性能数据锻造工坊 - 为Rust开发者打造的随机数据生成与数据库填充解决方案
4//! 
5//! ## 特性
6//! 
7//! - **闪电般快速** - 基于Rust的高性能随机数生成引擎
8//! - **数据库全支持** - 自动生成关系型数据库测试数据
9//! - **数据锻造车间** - 200+ 内置数据规则,支持多语言数据
10//! 
11//! ## 快速开始
12//! 
13//! ```rust
14//! use dataforge::generators::*;
15//! use serde_json::json;
16//! 
17//! // 生成测试用户数据
18//! let user = json!({
19//!     "id": uuid_v4(),
20//!     "name": name::zh_cn_fullname(),
21//!     "age": 25,
22//!     "email": internet::email(),
23//!     "created_at": datetime::iso8601()
24//! });
25//! ```
26
27pub mod generators;
28pub mod regions;
29pub mod macros;
30pub mod error;
31pub mod core;
32pub mod memory;
33pub mod rules;
34pub mod config;
35pub mod multithreading;
36pub mod customization;
37pub mod filling;
38pub mod generation;
39
40// 数据库相关模块统一放在 db 下
41pub mod db;
42
43// 重新导出核心类型
44pub use generators::*;
45pub use regions::*;
46pub use error::*;
47pub use core::{CoreEngine, GenConfig, GenerationStrategy, GeneratorMetrics};
48pub use db::{DataType, DatabaseForge, FieldSchema, SchemaParser, SimpleDatabaseForge, TableSchema};
49pub use memory::{MemoryPool, MemoryPoolConfig, StringPool};
50pub use rules::{Rule, RuleContext, RuleEngine, RuleType};
51pub use config::{Config, ConfigManager, DataGenConfig, DatabaseConfig};
52pub use multithreading::{ParallelGenerator, ThreadPool};
53pub use filling::{ConnectionConfig, ConnectionManager, DatabaseFiller, FillingConfig, FillingStats};
54pub use filling::utils;
55
56// 数据库相关类型别名
57#[cfg(feature = "database")]
58pub use db::{MySqlForge, PostgresForge, SqliteForge};
59
60/// 数据生成器注册表
61#[derive(Default)]
62pub struct DataForge {
63    generators: std::collections::HashMap<&'static str, Box<dyn Fn() -> serde_json::Value + Send + Sync>>,
64    #[allow(dead_code)]
65    lang: Language,
66}
67
68/// 支持的语言
69#[derive(Debug, Clone, Copy, Default)]
70pub enum Language {
71    #[default]
72    ZhCN,
73    EnUS,
74    JaJP,
75}
76
77impl DataForge {
78    /// 创建新的数据生成器实例
79    pub fn new(lang: Language) -> Self {
80        let mut df = Self {
81            generators: std::collections::HashMap::new(),
82            lang,
83        };
84        df.register_builtin_generators();
85        df
86    }
87
88    /// 注册内置生成器
89    fn register_builtin_generators(&mut self) {
90        self.generators.insert("uuid_v4", Box::new(|| {
91            serde_json::Value::String(uuid::Uuid::new_v4().to_string())
92        }));
93        
94        self.generators.insert("zh_cn_name", Box::new(|| {
95            serde_json::Value::String(generators::name::zh_cn_fullname())
96        }));
97        
98        self.generators.insert("en_us_name", Box::new(|| {
99            serde_json::Value::String(generators::name::en_us_fullname())
100        }));
101    }
102
103    /// 生成指定类型的数据
104    pub fn generate(&self, generator_type: &str) -> Option<serde_json::Value> {
105        self.generators.get(generator_type).map(|gen| gen())
106    }
107
108    /// 注册自定义生成器
109    pub fn register<F>(&mut self, name: &'static str, generator: F)
110    where
111        F: Fn() -> serde_json::Value + Send + Sync + 'static,
112    {
113        self.generators.insert(name, Box::new(generator));
114    }
115}
116
117#[cfg(test)]
118mod tests {
119    use super::*;
120
121    #[test]
122    fn test_dataforge_creation() {
123        let forge = DataForge::new(Language::ZhCN);
124        assert!(forge.generate("uuid_v4").is_some());
125    }
126
127    #[test]
128    fn test_custom_generator() {
129        let mut forge = DataForge::new(Language::ZhCN);
130        forge.register("test_gen", || serde_json::Value::String("test".to_string()));
131        
132        let result = forge.generate("test_gen");
133        assert_eq!(result, Some(serde_json::Value::String("test".to_string())));
134    }
135}