use bacnet_types::enums::{ObjectType, PropertyIdentifier};
#[inline]
pub(super) fn array_property_default(
object_type: ObjectType,
property: PropertyIdentifier,
) -> bool {
match property {
PropertyIdentifier::OBJECT_LIST
| PropertyIdentifier::PROPERTY_LIST
| PropertyIdentifier::STATE_TEXT
| PropertyIdentifier::PRIORITY
| PropertyIdentifier::WEEKLY_SCHEDULE
| PropertyIdentifier::EXCEPTION_SCHEDULE
| PropertyIdentifier::EVENT_TIME_STAMPS
| PropertyIdentifier::EVENT_MESSAGE_TEXTS
| PropertyIdentifier::PRIORITY_ARRAY
| PropertyIdentifier::TAGS
| PropertyIdentifier::SUBORDINATE_LIST
| PropertyIdentifier::SUBORDINATE_ANNOTATIONS
| PropertyIdentifier::GROUP_MEMBERS
| PropertyIdentifier::GROUP_MEMBER_NAMES
| PropertyIdentifier::ACTION
| PropertyIdentifier::STAGES
| PropertyIdentifier::STAGE_NAMES
| PropertyIdentifier::TARGET_REFERENCES => true,
PropertyIdentifier::ALARM_VALUES | PropertyIdentifier::FAULT_VALUES => matches!(
object_type,
ObjectType::CHARACTERSTRING_VALUE | ObjectType::BITSTRING_VALUE
),
PropertyIdentifier::LIST_OF_OBJECT_PROPERTY_REFERENCES => {
object_type == ObjectType::CHANNEL
}
PropertyIdentifier::PRESENT_VALUE => object_type == ObjectType::GLOBAL_GROUP,
_ => false,
}
}
#[inline]
pub(super) fn historical_writable_default(
object_type: ObjectType,
property: PropertyIdentifier,
) -> bool {
if property == PropertyIdentifier::OBJECT_IDENTIFIER
|| property == PropertyIdentifier::OBJECT_TYPE
|| property == PropertyIdentifier::PROPERTY_LIST
|| property == PropertyIdentifier::STATUS_FLAGS
{
return false;
}
if property == PropertyIdentifier::OBJECT_NAME {
return true;
}
if property == PropertyIdentifier::PRESENT_VALUE {
return object_type != ObjectType::ANALOG_INPUT
&& object_type != ObjectType::BINARY_INPUT
&& object_type != ObjectType::MULTI_STATE_INPUT;
}
property == PropertyIdentifier::DESCRIPTION
|| property == PropertyIdentifier::OUT_OF_SERVICE
|| property == PropertyIdentifier::COV_INCREMENT
|| property == PropertyIdentifier::HIGH_LIMIT
|| property == PropertyIdentifier::LOW_LIMIT
|| property == PropertyIdentifier::DEADBAND
|| property == PropertyIdentifier::NOTIFICATION_CLASS
}