Skip to content

Commit

Permalink
Separate mandatory attributes into a variable - perhaps will make a f…
Browse files Browse the repository at this point in the history
…unction on the trait next.
  • Loading branch information
locka99 committed Apr 6, 2019
1 parent b8cb15e commit 0994fdb
Show file tree
Hide file tree
Showing 7 changed files with 31 additions and 27 deletions.
3 changes: 2 additions & 1 deletion server/src/address_space/method.rs
Original file line number Diff line number Diff line change
Expand Up @@ -41,8 +41,9 @@ impl Method {
pub fn from_attributes<S>(node_id: &NodeId, browse_name: S, attributes: MethodAttributes) -> Result<Self, ()>
where S: Into<QualifiedName>
{
let mandatory_attributes = AttributesMask::DISPLAY_NAME | AttributesMask::EXECUTABLE | AttributesMask::USER_EXECUTABLE;
let mask = AttributesMask::from_bits(attributes.specified_attributes).ok_or(())?;
if mask.contains(AttributesMask::DISPLAY_NAME | AttributesMask::EXECUTABLE | AttributesMask::USER_EXECUTABLE) {
if mask.contains(mandatory_attributes) {
let mut node = Self::new(node_id, browse_name, attributes.display_name, attributes.executable, attributes.user_executable);
if mask.contains(AttributesMask::DESCRIPTION) {
node.set_description(attributes.description);
Expand Down
4 changes: 3 additions & 1 deletion server/src/address_space/object.rs
Original file line number Diff line number Diff line change
Expand Up @@ -26,8 +26,10 @@ impl Object {
pub fn from_attributes<S>(node_id: &NodeId, browse_name: S, attributes: ObjectAttributes) -> Result<Self, ()>
where S: Into<QualifiedName>
{
let mandatory_attributes = AttributesMask::DISPLAY_NAME | AttributesMask::EVENT_NOTIFIER;

let mask = AttributesMask::from_bits(attributes.specified_attributes).ok_or(())?;
if mask.contains(AttributesMask::DISPLAY_NAME | AttributesMask::EVENT_NOTIFIER) {
if mask.contains(mandatory_attributes) {
let mut node = Self::new(node_id, browse_name, attributes.display_name, attributes.event_notifier);
if mask.contains(AttributesMask::DESCRIPTION) {
node.set_description(attributes.description);
Expand Down
3 changes: 2 additions & 1 deletion server/src/address_space/object_type.rs
Original file line number Diff line number Diff line change
Expand Up @@ -26,8 +26,9 @@ impl ObjectType {
pub fn from_attributes<S>(node_id: &NodeId, browse_name: S, attributes: ObjectTypeAttributes) -> Result<Self, ()>
where S: Into<QualifiedName>
{
let mandatory_attributes = AttributesMask::DISPLAY_NAME | AttributesMask::IS_ABSTRACT;
let mask = AttributesMask::from_bits(attributes.specified_attributes).ok_or(())?;
if mask.contains(AttributesMask::DISPLAY_NAME | AttributesMask::IS_ABSTRACT) {
if mask.contains(mandatory_attributes) {
let mut node = Self::new(node_id, browse_name, attributes.display_name, attributes.is_abstract);
if mask.contains(AttributesMask::DESCRIPTION) {
node.set_description(attributes.description);
Expand Down
3 changes: 2 additions & 1 deletion server/src/address_space/reference_type.rs
Original file line number Diff line number Diff line change
Expand Up @@ -31,8 +31,9 @@ impl ReferenceType {
pub fn from_attributes<S>(node_id: &NodeId, browse_name: S, attributes: ReferenceTypeAttributes) -> Result<Self, ()>
where S: Into<QualifiedName>
{
let mandatory_attributes = AttributesMask::DISPLAY_NAME | AttributesMask::IS_ABSTRACT | AttributesMask::SYMMETRIC;
let mask = AttributesMask::from_bits(attributes.specified_attributes).ok_or(())?;
if mask.contains(AttributesMask::DISPLAY_NAME | AttributesMask::IS_ABSTRACT | AttributesMask::SYMMETRIC) {
if mask.contains(mandatory_attributes) {
let mut node = Self::new(node_id, browse_name, attributes.display_name, None, false, false);
if mask.contains(AttributesMask::DESCRIPTION) {
node.set_description(attributes.description);
Expand Down
5 changes: 3 additions & 2 deletions server/src/address_space/variable.rs
Original file line number Diff line number Diff line change
Expand Up @@ -152,9 +152,10 @@ impl Variable {
pub fn from_attributes<S>(node_id: &NodeId, browse_name: S, attributes: VariableAttributes) -> Result<Self, ()>
where S: Into<QualifiedName>
{
let mandatory_attributes = AttributesMask::DISPLAY_NAME | AttributesMask::ACCESS_LEVEL | AttributesMask::USER_ACCESS_LEVEL |
AttributesMask::DATA_TYPE | AttributesMask::HISTORIZING | AttributesMask::VALUE | AttributesMask::VALUE_RANK;
let mask = AttributesMask::from_bits(attributes.specified_attributes).ok_or(())?;
if mask.contains(AttributesMask::DISPLAY_NAME | AttributesMask::ACCESS_LEVEL | AttributesMask::USER_ACCESS_LEVEL |
AttributesMask::DATA_TYPE | AttributesMask::HISTORIZING | AttributesMask::VALUE | AttributesMask::VALUE_RANK) {
if mask.contains(mandatory_attributes) {
let mut node = Self::new_data_value(node_id, browse_name, attributes.display_name, attributes.data_type, attributes.value.into());
node.set_value_rank(attributes.value_rank);
node.set_historizing(attributes.historizing);
Expand Down
5 changes: 3 additions & 2 deletions server/src/address_space/variable_type.rs
Original file line number Diff line number Diff line change
Expand Up @@ -32,9 +32,10 @@ impl VariableType {
pub fn from_attributes<S>(node_id: &NodeId, browse_name: S, attributes: VariableTypeAttributes) -> Result<Self, ()>
where S: Into<QualifiedName>
{
let mandatory_attributes = AttributesMask::DISPLAY_NAME | AttributesMask::IS_ABSTRACT |
AttributesMask::DATA_TYPE | AttributesMask::VALUE_RANK;
let mask = AttributesMask::from_bits(attributes.specified_attributes).ok_or(())?;
if mask.contains(AttributesMask::DISPLAY_NAME | AttributesMask::IS_ABSTRACT |
AttributesMask::DATA_TYPE | AttributesMask::VALUE_RANK) {
if mask.contains(mandatory_attributes) {
let mut node = Self::new(node_id, browse_name, attributes.display_name,
attributes.data_type, attributes.is_abstract, attributes.value_rank);
if mask.contains(AttributesMask::DESCRIPTION) {
Expand Down
35 changes: 16 additions & 19 deletions server/src/address_space/view.rs
Original file line number Diff line number Diff line change
Expand Up @@ -27,27 +27,24 @@ impl View {
pub fn from_attributes<S>(node_id: &NodeId, browse_name: S, attributes: ViewAttributes) -> Result<Self, ()>
where S: Into<QualifiedName>
{
let mut node = Self::new(node_id, browse_name, "", 0u8, false);
let mandatory_attributes = AttributesMask::DISPLAY_NAME | AttributesMask::EVENT_NOTIFIER | AttributesMask::CONTAINS_NO_LOOPS;
let mask = AttributesMask::from_bits_truncate(attributes.specified_attributes);
if mask.contains(AttributesMask::DISPLAY_NAME) {
node.set_display_name(attributes.display_name);
if mask.contains(mandatory_attributes) {
let mut node = Self::new(node_id, browse_name, attributes.display_name, attributes.event_notifier, attributes.contains_no_loops);
if mask.contains(AttributesMask::DESCRIPTION) {
node.set_description(attributes.description);
}
if mask.contains(AttributesMask::WRITE_MASK) {
node.set_write_mask(WriteMask::from_bits_truncate(attributes.write_mask));
}
if mask.contains(AttributesMask::USER_WRITE_MASK) {
node.set_user_write_mask(WriteMask::from_bits_truncate(attributes.user_write_mask));
}
Ok(node)
} else {
error!("View cannot be created from attributes - missing mandatory values");
Err(())
}
if mask.contains(AttributesMask::DESCRIPTION) {
node.set_description(attributes.description);
}
if mask.contains(AttributesMask::WRITE_MASK) {
node.set_write_mask(WriteMask::from_bits_truncate(attributes.write_mask));
}
if mask.contains(AttributesMask::USER_WRITE_MASK) {
node.set_user_write_mask(WriteMask::from_bits_truncate(attributes.user_write_mask));
}
if mask.contains(AttributesMask::EVENT_NOTIFIER) {
node.set_event_notifier(attributes.event_notifier);
}
if mask.contains(AttributesMask::CONTAINS_NO_LOOPS) {
node.set_contains_no_loops(attributes.contains_no_loops);
}
Ok(node)
}

pub fn event_notifier(&self) -> bool {
Expand Down

0 comments on commit 0994fdb

Please sign in to comment.