ruwebframe 0.1.2

a simple webframe for rust actix-web, based on rudi and rbatis.
Documentation
// ==================== 业务模块(分散在各文件)====================

use heck::{ToLowerCamelCase, ToPascalCase, ToSnakeCase};
use std::sync::Arc;
//use ctor::ctor;
//use rudi::{Context, Transient};
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() }
    }
}

// 写在这里即可,不用集中到 main
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);

// ==================== main ====================

#[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)); // true
}
#[test]
fn test_areg() {
    // 1. 注册(全局,任意地方都能调)
    //ruregister:: register_singleton("db", Database::new);
    //ruregister:: register("logger", Logger::new);

    // 2. 获取单例(首次 get 时才 new,之后复用)
    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)); // true

    // 3. 获取多例(每次 get 都 new)
    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() {
    // rucfg::parse_config();
    println!("plat_user to_lower_camel_case = {}", "plat_user".to_lower_camel_case()); //pascal_case());
    println!("plat_user to_snake_case = {}", "platUser".to_snake_case());
    println!("if_windows = {}", fileutils::if_windows());
}