use crate::rubase::rutils::jsonutils;
use crate::rubase::{ruentity, BaseEntity};
use crate::rudi::dicontainer::direg;
use crate::{impl_base_entity, rulog};
use ctor::ctor;
use displaydoc::Display;
use serde::{Deserialize, Serialize};
use std::fmt;
use std::fmt::Debug;
use std::sync::Arc;
#[derive(Serialize,Default, Deserialize, Debug, Clone)]
pub struct Person {
pub id: i64,
pub name: String,
pub age: u16,
pub active: bool,
}
impl ruentity::BaseEntity for Person {
}
fn convert_to_fmt_result<T>(result: Result<T, serde_json::Error>) -> fmt::Result {
result.map_err(|e| {
eprintln!("JSON 错误: {}", e);
fmt::Error })?;
Ok(())
}
impl fmt::Display for Person {
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
let result = jsonutils::struct2json(&self);
match result {
Ok(data) => {
println!("成功: {:?}", data);
crate::rulog::rulog::info(data.as_str());
Ok(())
}
Err(e) => {
eprintln!("JSON 解析失败: {}", e);
Err(fmt::Error) }
}
}
}
impl Person {
pub fn log(&self) -> &Person {
let json_string =self.to_json(); rulog::rulog::info(json_string.as_str());
self
}
pub fn new() -> Person {
Self::new_as(0, String::new(), 30, true)
}
pub fn new_as(id: i64, name: String, age: u16, active: bool) -> Person {
Person {
id,
name,
age,
active,
}
}
}
const Single_BEAN_NAME: &str = "Single_BEAN_NAME.Person.bean_XXXX_db";
pub fn find_bean_person() -> Option<Arc<Person>> {
direg::get_bean::<Person>(Single_BEAN_NAME)
}
#[ctor(unsafe)]
pub fn register_bean_person() {
direg::register(Single_BEAN_NAME, Person::new);
}