mod impls;
pub(crate) mod parse;
#[cfg(feature = "std")]
mod std;
#[cfg(feature = "std")]
mod builder;
use crate::compat::{Name, String, Vec};
#[cfg(feature = "std")]
pub use builder::AttributeDefinitionBuilder;
pub const MAX_ATTRIBUTE_STRING_SIZE: usize = 256;
pub type AttributeString = String<MAX_ATTRIBUTE_STRING_SIZE>;
pub type EnumValues = Vec<Name, { crate::MAX_ATTRIBUTE_ENUM_VALUES }>;
pub type AttributeDefinitions = Vec<AttributeDefinition, { crate::MAX_ATTRIBUTE_DEFINITIONS }>;
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Default)]
pub enum AttributeObjectType {
#[default]
Network,
Node,
Message,
Signal,
}
#[derive(Debug, Clone, PartialEq)]
pub enum AttributeValueType {
Int {
min: i64,
max: i64,
},
Hex {
min: i64,
max: i64,
},
Float {
min: f64,
max: f64,
},
String,
Enum {
values: EnumValues,
},
}
#[derive(Debug, Clone, PartialEq)]
pub enum AttributeValue {
Int(i64),
Float(f64),
String(AttributeString),
}
#[derive(Debug, Clone, PartialEq)]
pub struct AttributeDefinition {
name: Name,
object_type: AttributeObjectType,
value_type: AttributeValueType,
}
impl AttributeDefinition {
#[inline]
pub(crate) fn new(
name: Name,
object_type: AttributeObjectType,
value_type: AttributeValueType,
) -> Self {
Self {
name,
object_type,
value_type,
}
}
}
#[derive(Debug, Clone, PartialEq, Eq, PartialOrd, Ord, Hash)]
pub enum AttributeTarget {
Network,
Node(Name),
Message(u32),
Signal(u32, Name),
}