pub mod prelude {
pub use wordval_core::{
codes, ApiError, Error, PageData, PageQuery, Plugin, PluginManager, Res, ResResult, Result,
};
pub use wordval_web::resources::{cfg, config, set_config, try_config};
#[cfg(feature = "db")]
pub use wordval_web::resources::{
db, db_default, db_names, register_db, remove_db, set_db, set_dbs, try_db, try_using,
DbHandle, DEFAULT_DB_NAME,
};
#[cfg(feature = "cache")]
pub use wordval_web::resources::{cache, set_cache, try_cache};
#[cfg(feature = "template")]
pub use wordval_web::resources::{render_template, set_template, try_template};
#[cfg(feature = "template")]
pub use wordval_web::TemplateEngine;
pub use wordval_config::AppConfig;
pub use wordval_web::middleware::{create_session, destroy_session, refresh_session};
#[cfg(feature = "cache")]
pub use wordval_web::middleware::{nonce, NonceState};
pub use wordval_web::{
current_tenant_id, require_tenant_id, resolve_tenant, with_tenant, App, CurrentUser,
FileSender, OptionalUser, TenantId, ValidatedJson, WordvalRouter,
};
#[cfg(feature = "db")]
pub use wordval_db::{
factory, ActiveTx, Db, DbExecutor, Hook, HookChain, Isolation, Row, RowExt, TryFromRow,
};
pub use serde_json::{json, Value as JsonValue};
#[cfg(feature = "cache")]
pub use wordval_cache::{Cache, CacheStats, LocalCache};
#[cfg(feature = "plugin")]
pub use wordval_scheduler::SchedulerPlugin;
#[cfg(all(feature = "plugin", feature = "cache"))]
pub use wordval_cache::CachePlugin;
#[cfg(all(feature = "plugin", feature = "fs"))]
pub use wordval_fs::FsPlugin;
#[cfg(feature = "plugin")]
pub use crate::create_plugins_from_config;
#[cfg(all(feature = "plugin", feature = "agent"))]
pub use crate::extend_plugins_from_config;
#[cfg(feature = "agent")]
pub use wordval_agent::AgentPlugin;
#[cfg(feature = "fs")]
pub use wordval_fs::{FileMeta, LocalFs};
pub use axum::extract::{Path, Query};
pub use axum::response::Json as AxumJson;
pub use axum::response::Json;
pub use axum::Extension;
}
pub use wordval_core::{trace_error, ApiError, Error, Res, ResResult, Result};
pub use wordval_utils::serde_utils;
pub use wordval_utils::sid;
pub use wordval_cache_macros::{cache_evict, cache_evict_pattern, cached};
pub use wordval_macros::{delete, get, idempotent, no_auth, permission, post, put, tools, Model};
pub use wordval_web::resources::{cfg, config, set_config, try_config};
#[cfg(feature = "db")]
pub use wordval_web::resources::{
db, db_default, db_names, register_db, remove_db, set_db, set_dbs, try_db, try_using, DbHandle,
DEFAULT_DB_NAME,
};
#[cfg(feature = "cache")]
pub use wordval_web::resources::{cache, set_cache, try_cache};
#[cfg(feature = "fs")]
pub use wordval_web::resources::{fs, set_fs, try_fs};
#[cfg(feature = "template")]
pub use wordval_web::resources::{render_template, set_template, try_template};
#[cfg(feature = "template")]
pub use wordval_web::TemplateEngine;
pub use wordval_config::AppConfig;
#[cfg(feature = "db")]
pub use wordval_db::{Db, Row, RowExt, Q};
pub use wordval_web::{
current_tenant_id, require_tenant_id, resolve_tenant, with_tenant, App, CurrentUser,
FileSender, NoAuthDef, OptionalUser, PermissionDef, RouteEntry, TenantId, ValidatedJson,
WordvalRouter, NO_AUTH_ROUTES, PERMISSION_ROUTES, ROUTES,
};
pub use linkme::distributed_slice;
pub use uuid;
pub use axum;
pub use serde_json;
pub use wordval_web as web;
#[cfg(feature = "plugin")]
pub use wordval_scheduler;
#[cfg(feature = "agent")]
pub use wordval_agent;
#[cfg(feature = "fs")]
pub use wordval_fs;
#[cfg(feature = "plugin")]
pub fn create_plugins_from_config(config: &AppConfig) -> wordval_core::PluginManager {
let mut mgr = wordval_core::PluginManager::new();
for name in &config.plugins.enabled {
match name.as_str() {
"scheduler" => {
mgr = mgr.add(wordval_scheduler::SchedulerPlugin::new());
tracing::info!("插件: scheduler 已注册");
}
"cache" => {
mgr = mgr.add(wordval_cache::CachePlugin::new(
&config.cache,
&config.redis,
));
tracing::info!("插件: cache 已注册");
}
"fs" => {
#[cfg(feature = "fs")]
{
mgr = mgr.add(wordval_fs::FsPlugin::new(&config.fs));
tracing::info!("插件: fs 已注册");
}
}
"sid" => {
tracing::warn!(
"配置中的 'sid' 插件已废弃:短 ID 生成是无状态工具,请改用 wordval_utils::Sid"
);
}
"agent" => {
#[cfg(feature = "agent")]
{
mgr = mgr.add(wordval_agent::AgentPlugin::new());
tracing::info!("插件: agent 已注册");
}
}
other => {
#[cfg(feature = "agent")]
let opts = "scheduler, cache, fs, agent";
#[cfg(not(feature = "agent"))]
let opts = "scheduler, cache, fs";
panic!("未知插件名: {other}(可选: {opts})");
}
}
}
mgr
}
#[cfg(all(feature = "plugin", feature = "agent"))]
pub fn extend_plugins_from_config(
mgr: wordval_core::PluginManager,
config: &AppConfig,
) -> wordval_core::PluginManager {
if config.plugins.enabled.iter().any(|n| n == "agent") {
mgr.add(wordval_agent::AgentPlugin::new())
} else {
mgr
}
}