use crate::block::Block;
use crate::entity::Entity;
use crate::table::{Layer, Style};
use crate::value::GroupValue;
use alloc::collections::BTreeMap;
use alloc::vec::Vec;
#[derive(Debug, Default)]
pub struct Drawing<'a> {
pub headers: BTreeMap<&'a str, GroupValue<'a>>,
pub entities: Vec<Entity<'a>>,
pub layers: Vec<Layer<'a>>,
pub styles: Vec<Style<'a>>,
pub blocks: Vec<Block<'a>>,
pub layers_by_name: BTreeMap<&'a [u8], usize>,
pub styles_by_name: BTreeMap<&'a [u8], usize>,
pub blocks_by_name: BTreeMap<&'a [u8], usize>,
pub entity_by_handle: BTreeMap<&'a [u8], usize>,
}
impl<'a> Drawing<'a> {
pub fn header(&self, name: &str) -> Option<&GroupValue<'a>> {
self.headers.get(name)
}
pub fn layer_by_name(&self, name: &[u8]) -> Option<&Layer<'a>> {
self.layers_by_name.get(name).map(|&i| &self.layers[i])
}
pub fn style_by_name(&self, name: &[u8]) -> Option<&Style<'a>> {
self.styles_by_name.get(name).map(|&i| &self.styles[i])
}
pub fn block_by_name(&self, name: &[u8]) -> Option<&Block<'a>> {
self.blocks_by_name.get(name).map(|&i| &self.blocks[i])
}
pub fn entity_by_handle(&self, handle: &[u8]) -> Option<&Entity<'a>> {
self.entity_by_handle
.get(handle)
.map(|&i| &self.entities[i])
}
}