Skip to main content

fcb_core/reader/
city_buffer.rs

1use crate::deserializer::to_cj_feature;
2use crate::error::Error;
3use crate::fb::*;
4use cjseq::CityJSONFeature;
5
6use super::deserializer::to_meta;
7use super::Meta;
8
9pub struct FcbBuffer {
10    pub header_buf: Vec<u8>,
11    pub features_buf: Vec<u8>,
12}
13
14impl FcbBuffer {
15    pub fn header(&self) -> Header<'_> {
16        unsafe { size_prefixed_root_as_header_unchecked(&self.header_buf) }
17    }
18
19    pub fn feature(&self) -> CityFeature<'_> {
20        unsafe { size_prefixed_root_as_city_feature_unchecked(&self.features_buf) }
21    }
22
23    // TODO: think well if needed
24    pub fn cj_feature(&self) -> Result<CityJSONFeature, Error> {
25        let fcb_feature = self.feature();
26        let root_attr_schema = self.header().columns();
27        let semantic_attr_schema = self.header().semantic_columns();
28        to_cj_feature(fcb_feature, root_attr_schema, semantic_attr_schema)
29    }
30
31    pub fn meta(&self) -> Result<Meta, Error> {
32        to_meta(self.header())
33    }
34}