use std::collections::BTreeMap;
use qubit_datatype::DataType;
use crate::schema::{
MetadataField,
MetadataSchema,
UnknownFieldPolicy,
};
#[derive(Debug, Clone, PartialEq, Eq, Default)]
pub struct MetadataSchemaBuilder {
fields: BTreeMap<String, MetadataField>,
unknown_field_policy: UnknownFieldPolicy,
}
impl MetadataSchemaBuilder {
#[inline]
#[must_use]
pub fn required(mut self, key: &str, data_type: DataType) -> Self {
self.fields
.insert(key.to_string(), MetadataField::new(data_type, true));
self
}
#[inline]
#[must_use]
pub fn optional(mut self, key: &str, data_type: DataType) -> Self {
self.fields
.insert(key.to_string(), MetadataField::new(data_type, false));
self
}
#[inline]
#[must_use]
pub fn unknown_field_policy(mut self, policy: UnknownFieldPolicy) -> Self {
self.unknown_field_policy = policy;
self
}
#[inline]
#[must_use]
pub fn build(self) -> MetadataSchema {
MetadataSchema::new(self.fields, self.unknown_field_policy)
}
}