source2_demo/entity/
class.rs1use crate::entity::field::Serializer;
2use crate::error::ClassError;
3use crate::HashMap;
4use std::rc::Rc;
5
6#[derive(Default)]
8pub struct Classes {
9 pub(crate) classes_vec: Vec<Rc<Class>>,
10 pub(crate) classes_by_name: HashMap<Box<str>, Rc<Class>>,
11 pub(crate) class_id_size: u32,
12}
13
14impl Classes {
15 pub(crate) fn get_by_id_rc(&self, id: usize) -> &Rc<Class> {
16 &self.classes_vec[id]
17 }
18
19 pub fn iter(&self) -> impl Iterator<Item = &Class> {
21 self.classes_vec.iter().map(|class| class.as_ref())
22 }
23
24 pub fn get_by_id(&self, id: usize) -> Result<&Class, ClassError> {
26 self.classes_vec
27 .get(id)
28 .ok_or(ClassError::ClassNotFoundById(id as i32))
29 .map(|class| class.as_ref())
30 }
31
32 pub fn get_by_name(&self, name: &str) -> Result<&Class, ClassError> {
34 self.classes_by_name
35 .get(name)
36 .ok_or_else(|| ClassError::ClassNotFoundByName(name.to_string()))
37 .map(|class| class.as_ref())
38 }
39}
40
41#[derive(Clone, Default)]
43pub struct Class {
44 pub(crate) id: i32,
45 pub(crate) name: Box<str>,
46 pub(crate) serializer: Rc<Serializer>,
47}
48
49impl Class {
50 pub(crate) fn new(id: i32, name: Box<str>, serializer: Rc<Serializer>) -> Self {
51 Class {
52 id,
53 name,
54 serializer,
55 }
56 }
57
58 pub fn name(&self) -> &str {
61 self.name.as_ref()
62 }
63
64 pub fn id(&self) -> i32 {
67 self.id
68 }
69}