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
37 .insert(key.to_string(), MetadataField::new(data_type, true));
38 self
39 }
40
41 #[inline]
43 #[must_use]
44 pub fn optional(mut self, key: &str, data_type: DataType) -> Self {
45 self.fields
46 .insert(key.to_string(), MetadataField::new(data_type, false));
47 self
48 }
49
50 #[inline]
52 #[must_use]
53 pub fn unknown_field_policy(mut self, policy: UnknownFieldPolicy) -> Self {
54 self.unknown_field_policy = policy;
55 self
56 }
57
58 #[inline]
60 #[must_use]
61 pub fn build(self) -> MetadataSchema {
62 MetadataSchema::new(self.fields, self.unknown_field_policy)
63 }
64}