universal_bot_core/
lib.rs1#![deny(missing_docs, rust_2018_idioms, clippy::all)]
25#![warn(clippy::pedantic, clippy::nursery)]
26#![allow(
27 clippy::module_name_repetitions,
28 clippy::must_use_candidate,
29 clippy::missing_const_for_fn,
30 clippy::missing_errors_doc,
31 clippy::struct_excessive_bools,
32 clippy::cast_precision_loss,
33 clippy::unnecessary_literal_bound,
34 clippy::significant_drop_in_scrutinee
35)]
36
37pub mod bot;
38pub mod config;
39pub mod context;
40pub mod error;
41pub mod message;
42pub mod pipeline;
43pub mod plugin;
44
45pub use bot::{Bot, BotBuilder};
47pub use config::{BotConfig, BotConfigBuilder};
48pub use context::{Context, ContextManager, ContextStore};
49pub use error::{Error, Result};
50pub use message::{Message, MessageType, Response};
51pub use pipeline::{MessagePipeline, PipelineStage};
52pub use plugin::{Plugin, PluginRegistry};
53
54pub const VERSION: &str = env!("CARGO_PKG_VERSION");
56
57pub fn init() -> Result<()> {
74 use tracing_subscriber::{layer::SubscriberExt, util::SubscriberInitExt};
75
76 tracing_subscriber::registry()
77 .with(
78 tracing_subscriber::EnvFilter::try_from_default_env().unwrap_or_else(|_| "info".into()),
79 )
80 .with(tracing_subscriber::fmt::layer())
81 .try_init()
82 .map_err(|e| Error::Initialization(e.to_string()))?;
83
84 tracing::info!("Universal Bot Core v{} initialized", VERSION);
85 Ok(())
86}
87
88#[cfg(test)]
89mod tests {
90 use super::*;
91
92 #[test]
93 fn test_version() {
94 assert_eq!(VERSION, "1.0.0");
95 assert!(VERSION.contains('.'));
96 }
97
98 #[test]
99 fn test_init() {
100 let _ = init();
102 let _ = init();
103 }
104}