Add the route to update a relay
This commit is contained in:
@ -23,6 +23,8 @@ pub enum DevicesListError {
|
||||
DeviceNotFound,
|
||||
#[error("Requested device is not validated")]
|
||||
DeviceNotValidated,
|
||||
#[error("Failed to update relay configuration: {0}")]
|
||||
UpdateRelayFailed(&'static str),
|
||||
#[error("Failed to delete relay: {0}")]
|
||||
DeleteRelayFailed(&'static str),
|
||||
}
|
||||
@ -224,12 +226,23 @@ impl DevicesList {
|
||||
self.relays_list().into_iter().find(|i| i.id == relay_id)
|
||||
}
|
||||
|
||||
/// Get the device hosting a relay
|
||||
pub fn relay_get_device(&self, relay_id: DeviceRelayID) -> Option<Device> {
|
||||
/// Get a mutable reference on a single relay
|
||||
pub fn relay_get_single_mut(&mut self, relay_id: DeviceRelayID) -> Option<&mut DeviceRelay> {
|
||||
self.0
|
||||
.iter()
|
||||
.iter_mut()
|
||||
.find(|d| d.1.relays.iter().any(|r| r.id == relay_id))?
|
||||
.1
|
||||
.relays
|
||||
.iter_mut()
|
||||
.find(|r| r.id == relay_id)
|
||||
}
|
||||
|
||||
/// Get the device hosting a relay
|
||||
pub fn relay_get_device(&mut self, relay_id: DeviceRelayID) -> Option<&mut Device> {
|
||||
self.0
|
||||
.iter_mut()
|
||||
.find(|r| r.1.relays.iter().any(|r| r.id == relay_id))
|
||||
.map(|d| d.1.clone())
|
||||
.map(|d| d.1)
|
||||
}
|
||||
|
||||
/// Get all the relays that depends directly on a relay
|
||||
@ -240,6 +253,27 @@ impl DevicesList {
|
||||
.collect()
|
||||
}
|
||||
|
||||
/// Update a relay configuration
|
||||
pub fn relay_update(&mut self, relay: DeviceRelay) -> anyhow::Result<()> {
|
||||
let device = self
|
||||
.relay_get_device(relay.id)
|
||||
.ok_or(DevicesListError::UpdateRelayFailed(
|
||||
"Relay does not exists!",
|
||||
))?;
|
||||
|
||||
let idx = device.relays.iter().position(|r| r.id == relay.id).ok_or(
|
||||
DevicesListError::UpdateRelayFailed("Relay index not found!"),
|
||||
)?;
|
||||
|
||||
// Update the relay configuration
|
||||
device.relays[idx] = relay;
|
||||
let device_id = device.id.clone();
|
||||
|
||||
self.persist_dev_config(&device_id)?;
|
||||
|
||||
Ok(())
|
||||
}
|
||||
|
||||
/// Delete a relay
|
||||
pub fn relay_delete(&mut self, relay_id: DeviceRelayID) -> anyhow::Result<()> {
|
||||
if !self.relay_get_direct_dependencies(relay_id).is_empty() {
|
||||
@ -256,14 +290,10 @@ impl DevicesList {
|
||||
"Relay does not exists!",
|
||||
))?;
|
||||
|
||||
let dev = self
|
||||
.0
|
||||
.get_mut(&device.id)
|
||||
.ok_or(DevicesListError::UpdateDeviceFailedDeviceNotFound)?;
|
||||
device.relays.retain(|r| r.id != relay_id);
|
||||
|
||||
dev.relays.retain(|r| r.id != relay_id);
|
||||
|
||||
self.persist_dev_config(&device.id)?;
|
||||
let device_id = device.id.clone();
|
||||
self.persist_dev_config(&device_id)?;
|
||||
|
||||
Ok(())
|
||||
}
|
||||
|
Reference in New Issue
Block a user