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