use mf_core::{
ForgeRuntimeBuilder, RuntimeType, Environment, types::Content, ForgeResult,
};
#[tokio::main]
async fn main() -> ForgeResult<()> {
println!("=== ModuForge 改进的 API 使用示例 ===\n");
example_1_simplest().await?;
example_2_specify_runtime().await?;
example_3_fluent_config().await?;
example_5_with_schema().await?;
example_6_production().await?;
example_7_runtime_matching().await?;
Ok(())
}
async fn example_1_simplest() -> ForgeResult<()> {
println!("📝 示例 1: 最简单的用法\n");
let mut runtime = ForgeRuntimeBuilder::new().build().await?;
println!("✅ 运行时创建成功");
println!(" 类型: {:?}", runtime.runtime_type());
let state = runtime.get_state().await?;
println!(" 文档节点数: {}", state.doc().size());
println!();
Ok(())
}
async fn example_2_specify_runtime() -> ForgeResult<()> {
println!("📝 示例 2: 指定运行时类型\n");
let mut runtime = ForgeRuntimeBuilder::new()
.runtime_type(RuntimeType::Async)
.build()
.await?;
println!("✅ 运行时创建成功");
println!(" 类型: {:?}", runtime.runtime_type());
if let Some(async_rt) = runtime.as_async() {
println!(" 这是一个异步运行时");
}
println!();
Ok(())
}
async fn example_3_fluent_config() -> ForgeResult<()> {
println!("📝 示例 3: 链式配置\n");
let mut runtime = ForgeRuntimeBuilder::new()
.runtime_type(RuntimeType::Async)
.max_concurrent_tasks(20)
.queue_size(5000)
.enable_monitoring(true)
.middleware_timeout_ms(1000)
.history_limit(1000)
.build()
.await?;
println!("✅ 运行时创建成功(自定义配置)");
println!(" 类型: {:?}", runtime.runtime_type());
println!();
Ok(())
}
#[allow(dead_code)]
async fn example_4_from_config_file() -> ForgeResult<()> {
println!("📝 示例 4: 从配置文件加载\n");
let mut runtime = ForgeRuntimeBuilder::from_config_file("config.toml")
.await?
.build()
.await?;
println!("✅ 从配置文件创建成功");
println!(" 类型: {:?}", runtime.runtime_type());
println!();
Ok(())
}
async fn example_5_with_schema() -> ForgeResult<()> {
println!("📝 示例 5: 使用 XML Schema\n");
let result =
ForgeRuntimeBuilder::new().schema_path("schema/main.xml").build().await;
match result {
Ok(mut runtime) => {
println!("✅ 使用 Schema 创建成功");
println!(" 类型: {:?}", runtime.runtime_type());
let schema = runtime.schema().await?;
println!(" Schema 已加载");
},
Err(e) => {
println!("⚠️ Schema 文件不存在或加载失败: {}", e);
println!(" 这是正常的,如果没有 schema 文件");
},
}
println!();
Ok(())
}
async fn example_6_production() -> ForgeResult<()> {
println!("📝 示例 6: 生产环境配置\n");
let mut runtime = ForgeRuntimeBuilder::new()
.environment(Environment::Production)
.runtime_type(RuntimeType::Actor) .enable_monitoring(true) .build()
.await?;
println!("✅ 生产环境运行时创建成功");
println!(" 类型: {:?}", runtime.runtime_type());
println!();
Ok(())
}
async fn example_7_runtime_matching() -> ForgeResult<()> {
println!("📝 示例 7: 运行时类型匹配\n");
let mut runtime = ForgeRuntimeBuilder::new().build().await?;
match &runtime {
mf_core::runtime::builder::AnyRuntime::Sync(rt) => {
println!("✅ 使用同步运行时");
println!(" 适合: 简单场景、低配机器");
},
mf_core::runtime::builder::AnyRuntime::Async(rt) => {
println!("✅ 使用异步运行时");
println!(" 适合: 中等并发、标准配置");
},
mf_core::runtime::builder::AnyRuntime::Actor(rt) => {
println!("✅ 使用 Actor 运行时");
println!(" 适合: 高并发、高配机器");
},
}
if let Some(_async_rt) = runtime.as_async() {
println!(" 这是异步运行时的特定操作");
}
println!();
Ok(())
}
#[allow(dead_code)]
fn api_comparison() {
println!("=== API 对比 ===\n");
println!("旧 API(复杂):");
println!("```rust");
println!("// 方式 1: 直接创建");
println!("let runtime = ForgeRuntime::create(options).await?;");
println!();
println!("// 方式 2: 使用构建器");
println!("let runtime = ForgeRuntimeBuilder::auto(None).await?;");
println!();
println!("// 方式 3: 指定类型");
println!(
"let runtime = ForgeRuntimeBuilder::with_type(RuntimeType::Actor, None).await?;"
);
println!();
println!("// 方式 4: 从配置");
println!(
"let runtime = ForgeRuntimeBuilder::from_config(config, Some(options)).await?;"
);
println!("```\n");
println!("新 API(统一、流畅):");
println!("```rust");
println!("// 最简单");
println!("let runtime = ForgeRuntimeBuilder::new().build().await?;");
println!();
println!("// 指定类型");
println!("let runtime = ForgeRuntimeBuilder::new()");
println!(" .runtime_type(RuntimeType::Actor)");
println!(" .build().await?;");
println!();
println!("// 完全自定义");
println!("let runtime = ForgeRuntimeBuilder::new()");
println!(" .runtime_type(RuntimeType::Async)");
println!(" .max_concurrent_tasks(20)");
println!(" .enable_monitoring(true)");
println!(" .build().await?;");
println!("```\n");
println!("优势:");
println!("✅ 统一的入口点(ForgeRuntimeBuilder::new())");
println!("✅ 流畅的链式 API");
println!("✅ 类型安全的配置");
println!("✅ 返回具体的枚举类型而非 trait object");
println!("✅ 支持渐进式配置");
}