use super::AttributeDefinitionBuilder;
use crate::attribute::{AttributeObjectType, AttributeValueType, EnumValues};
use crate::compat::Name;
impl AttributeDefinitionBuilder {
#[must_use]
pub fn new() -> Self {
Self::default()
}
#[must_use]
pub fn name(mut self, name: &str) -> Self {
self.name = Some(name.to_string());
self
}
#[must_use]
pub fn object_type_network(mut self) -> Self {
self.object_type = AttributeObjectType::Network;
self
}
#[must_use]
pub fn object_type_node(mut self) -> Self {
self.object_type = AttributeObjectType::Node;
self
}
#[must_use]
pub fn object_type_message(mut self) -> Self {
self.object_type = AttributeObjectType::Message;
self
}
#[must_use]
pub fn object_type_signal(mut self) -> Self {
self.object_type = AttributeObjectType::Signal;
self
}
#[must_use]
pub fn object_type(mut self, object_type: AttributeObjectType) -> Self {
self.object_type = object_type;
self
}
#[must_use]
pub fn int_type(mut self, min: i64, max: i64) -> Self {
self.value_type = Some(AttributeValueType::Int { min, max });
self
}
#[must_use]
pub fn hex_type(mut self, min: i64, max: i64) -> Self {
self.value_type = Some(AttributeValueType::Hex { min, max });
self
}
#[must_use]
pub fn float_type(mut self, min: f64, max: f64) -> Self {
self.value_type = Some(AttributeValueType::Float { min, max });
self
}
#[must_use]
pub fn string_type(mut self) -> Self {
self.value_type = Some(AttributeValueType::String);
self
}
pub fn enum_type(mut self, values: &[&str]) -> crate::Result<Self> {
let mut enum_values = EnumValues::new();
for &value in values {
let name = Name::try_from(value)
.map_err(|_| crate::Error::expected(crate::Error::MAX_NAME_SIZE_EXCEEDED))?;
enum_values.push(name).map_err(|_| {
crate::Error::expected(crate::Error::ATTRIBUTE_ENUM_VALUES_TOO_MANY)
})?;
}
self.value_type = Some(AttributeValueType::Enum {
values: enum_values,
});
Ok(self)
}
#[must_use]
pub fn value_type(mut self, value_type: AttributeValueType) -> Self {
self.value_type = Some(value_type);
self
}
}