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