use heck::{ToLowerCamelCase, ToPascalCase, ToSnakeCase};
use std::sync::Arc;
use ruwebframe::rubase::rutils::fileutils;
use ruwebframe::rudi::dicontainer;
use ruwebframe::rudi::dicontainer::direg;
use ruwebframe::{register_singleton, register_transient, rucfg};
pub struct Database {
pub id: u64,
}
impl Database {
pub fn new() -> Self {
println!(">>> Database::new()");
Self { id: rand::random() }
}
}
register_singleton!("db", Database, Database::new);
#[derive(Clone, Debug, PartialEq, Eq)]
pub struct Logger;
impl Logger {
pub fn new() -> Self {
println!(">>> Logger::new()");
Self
}
}
register_transient!("logger", Logger, Logger::new);
#[test]
fn test001() {
let mut container = dicontainer::Container::new();
dicontainer::bootstrap(&mut container);
let db1 = container.get_singleton::<Database>("db").unwrap();
let db2 = container.get_singleton::<Database>("db").unwrap();
println!("同一实例 ? {}", Arc::ptr_eq(&db1, &db2)); }
#[test]
fn test_areg() {
let db1 = dicontainer::get_singleton::<Database>("db").unwrap();
let db2 = dicontainer::get_singleton::<Database>("db").unwrap();
println!("Arc::ptr_eq(db1, db2) = {}", Arc::ptr_eq(&db1, &db2));
let log1 = direg::get::<Logger>("logger").unwrap();
let log2 = direg::get::<Logger>("logger").unwrap();
println!("多例: log1={:?}, log2={:?} {}", log1, log2, log1 == log2);
}
#[test]
fn test_004_parse_config() {
println!("plat_user to_lower_camel_case = {}", "plat_user".to_lower_camel_case()); println!("plat_user to_snake_case = {}", "platUser".to_snake_case());
println!("if_windows = {}", fileutils::if_windows());
}