dbc_rs/attribute/builder/
build.rs

1//! Build method implementation for AttributeDefinitionBuilder.
2
3use super::AttributeDefinitionBuilder;
4use crate::attribute::AttributeDefinition;
5use crate::compat::Name;
6use crate::{Error, Result};
7
8impl AttributeDefinitionBuilder {
9    /// Builds the attribute definition.
10    ///
11    /// # Errors
12    ///
13    /// Returns an error if:
14    /// - The name is not set
15    /// - The value type is not set
16    /// - The name exceeds the maximum size
17    pub fn build(self) -> Result<AttributeDefinition> {
18        // Validate name
19        let name_str = self.name.ok_or_else(|| Error::expected(Error::ATTRIBUTE_NAME_REQUIRED))?;
20
21        let name = Name::try_from(name_str.as_str())
22            .map_err(|_| Error::expected(Error::MAX_NAME_SIZE_EXCEEDED))?;
23
24        // Validate value type
25        let value_type = self
26            .value_type
27            .ok_or_else(|| Error::expected(Error::ATTRIBUTE_VALUE_TYPE_REQUIRED))?;
28
29        Ok(AttributeDefinition::new(name, self.object_type, value_type))
30    }
31}