use diesel::{dsl::delete, prelude::*};
use crate::registry::{diesel::schema::splinter_nodes, Node, RegistryError};
use super::{get_node::RegistryFetchNodeOperation, RegistryOperations};
pub(in crate::registry::diesel) trait RegistryDeleteNodeOperation {
fn delete_node(&self, identity: &str) -> Result<Option<Node>, RegistryError>;
}
impl<'a, C> RegistryDeleteNodeOperation for RegistryOperations<'a, C>
where
C: diesel::Connection,
String: diesel::deserialize::FromSql<diesel::sql_types::Text, C::Backend>,
{
fn delete_node(&self, identity: &str) -> Result<Option<Node>, RegistryError> {
self.conn.transaction(|| {
self.get_node(identity).and_then(|node| {
delete(splinter_nodes::table.find(identity)).execute(self.conn)?;
Ok(node)
})
})
}
}