use std::sync::Arc;
use crate::sync::*;
use crate::types::{
service_types::{CallMethodRequest, CallMethodResult, TimestampsToReturn},
status_code::StatusCode,
AttributeId, DataValue, NodeId, NumericRange, QualifiedName,
};
use super::session::{Session, SessionManager};
pub trait AttributeGetter {
fn get(
&mut self,
node_id: &NodeId,
timestamps_to_return: TimestampsToReturn,
attribute_id: AttributeId,
index_range: NumericRange,
data_encoding: &QualifiedName,
max_age: f64,
) -> Result<Option<DataValue>, StatusCode>;
}
pub trait AttributeSetter {
fn set(
&mut self,
node_id: &NodeId,
attribute_id: AttributeId,
index_range: NumericRange,
data_value: DataValue,
) -> Result<(), StatusCode>;
}
pub trait RegisterNodes {
fn register_nodes(
&mut self,
session: Arc<RwLock<Session>>,
nodes_to_register: &[NodeId],
) -> Result<Vec<NodeId>, StatusCode>;
}
pub trait UnregisterNodes {
fn unregister_nodes(
&mut self,
session: Arc<RwLock<Session>>,
nodes_to_unregister: &[NodeId],
) -> Result<(), StatusCode>;
}
pub trait Method {
fn call(
&mut self,
session_id: &NodeId,
session_manager: Arc<RwLock<SessionManager>>,
request: &CallMethodRequest,
) -> Result<CallMethodResult, StatusCode>;
}