quadbin_schema/
metadata.rs1use arrow_schema::{ArrowError, Field};
2use serde::{Deserialize, Serialize};
3use serde_json::Value;
4
5use std::usize;
6
7#[derive(Default, Debug, Clone, Serialize, Deserialize, PartialEq, Eq, Hash)]
8pub struct Metadata {
9 pub min_zoom: i32,
10 pub max_zoom: i32,
11}
12
13impl Metadata {
14 pub fn new(min_zoom: i32, max_zoom: i32) -> Self {
16 Self { min_zoom, max_zoom }
17 }
18
19 pub fn min_zoom(&self) -> &i32 {
21 &self.min_zoom
22 }
23
24 pub fn max_zoom(&self) -> &i32 {
26 &self.max_zoom
27 }
28
29 pub fn to_json_value(&self) -> Value {
30 serde_json::to_value(self).unwrap()
31 }
32
33 pub fn to_str_value(&self) -> String {
34 let json_value = self.to_json_value();
35
36 serde_json::to_string(&json_value).unwrap()
37 }
38
39 pub(crate) fn serialize(&self) -> Option<String> {
43 Some(serde_json::to_string(&self).unwrap())
44 }
45
46 pub(crate) fn deserialize<S: AsRef<str>>(metadata: Option<S>) -> Result<Self, ArrowError> {
48 if let Some(ext_meta) = metadata {
49 Ok(serde_json::from_str(ext_meta.as_ref())
50 .map_err(|err| ArrowError::ExternalError(Box::new(err)))?)
51 } else {
52 Ok(Default::default())
53 }
54 }
55}
56
57impl TryFrom<&Field> for Metadata {
58 type Error = ArrowError;
59
60 fn try_from(value: &Field) -> Result<Self, Self::Error> {
61 Self::deserialize(value.extension_type_metadata())
62 }
63}