usc 1.20230730.1349

A common lib for unitedservices
Documentation

use bevy_reflect::{
    Reflect,Struct
};


use std::default::Default;
use crate::{mylog};
use crate::myerror::MyError;




pub trait IDbModel:Reflect+Default+Struct {
    fn  prepare<F>(&mut self,mut f:F) ->Result<& mut Self,MyError> where F: FnMut(& mut Self) {
        f(self);
        Ok(self)
    }
    fn  prepare_with_defaults<F>(&mut self,mut f:F) ->Result<& mut Self,MyError> where F: FnMut(& mut Self) {
        let mut info = self.clone_dynamic();
        for (i, value) in self.iter_fields().enumerate() {
            let name = self.name_at(i).unwrap();
            match value.type_name() {
                "alloc::string::String" => {
                    info.insert(name, String::from(crate::db::STRING_DEFAULT));
                }
                "i32" => {
                    info.insert(name, crate::db::INT32_DEFAULT);
                }
                "i64" => {
                    info.insert(name, crate::db::INT64_DEFAULT);
                }
                "f32" => {
                    info.insert(name, crate::db::FLOAT32_DEFAULT);
                }
                "f64" => {
                    info.insert(name, crate::db::FLOAT64_DEFAULT);
                }
                "usc::db::const_type_defaults::Bool"=>{
                     info.insert(name, crate::db::BOOL_DEFAULT);
                }
                &_ => {
                    mylog!("value.type_name()",value.type_name());
                    todo!();
                },
            }
        }
        self.apply(&info);
        f(self);
        Ok(self)
    }
    fn has_id(&self) -> bool {
        let field: &dyn Reflect = self.field("id").unwrap();
        let val = field.downcast_ref::<i64>().unwrap();
        match *val {
            0 | crate::db::INT64_DEFAULT => false,
            _ => true,
        }
    }

    fn id(&self) -> i64 {
        let field: &dyn Reflect = self.field("id").unwrap();
        let val = field.downcast_ref::<i64>().unwrap();
        *val
    }
}