qubit_metadata/schema/
metadata_schema_builder.rs1use std::collections::BTreeMap;
13
14use qubit_datatype::DataType;
15
16use crate::schema::{MetadataField, MetadataSchema, UnknownFieldPolicy};
17
18#[derive(Debug, Clone, PartialEq, Eq, Default)]
20pub struct MetadataSchemaBuilder {
21 fields: BTreeMap<String, MetadataField>,
23 unknown_field_policy: UnknownFieldPolicy,
25}
26
27impl MetadataSchemaBuilder {
28 #[inline]
30 #[must_use]
31 pub fn required(mut self, key: &str, data_type: DataType) -> Self {
32 self.fields
33 .insert(key.to_string(), MetadataField::new(data_type, true));
34 self
35 }
36
37 #[inline]
39 #[must_use]
40 pub fn optional(mut self, key: &str, data_type: DataType) -> Self {
41 self.fields
42 .insert(key.to_string(), MetadataField::new(data_type, false));
43 self
44 }
45
46 #[inline]
48 #[must_use]
49 pub fn unknown_field_policy(mut self, policy: UnknownFieldPolicy) -> Self {
50 self.unknown_field_policy = policy;
51 self
52 }
53
54 #[inline]
56 #[must_use]
57 pub fn build(self) -> MetadataSchema {
58 MetadataSchema::new(self.fields, self.unknown_field_policy)
59 }
60}