fix: simplify repeated patterns

This commit is contained in:
2026-02-18 17:07:27 -08:00
parent 03f38b9ee3
commit 76d60080f7

View File

@@ -4,6 +4,7 @@ use std::net::{IpAddr, Ipv4Addr};
use futures::TryFutureExt; use futures::TryFutureExt;
use ipnetwork::IpNetwork; use ipnetwork::IpNetwork;
use redis::AsyncTypedCommands; use redis::AsyncTypedCommands;
use redis::aio::MultiplexedConnection;
use registry::Peer; use registry::Peer;
use serde::Deserialize; use serde::Deserialize;
@@ -29,12 +30,7 @@ pub struct RegisterRequest {
impl StorageImpl for ValkeyStorage { impl StorageImpl for ValkeyStorage {
async fn register_device(&self, request: &RegisterRequest) -> Result<Ipv4Addr> { async fn register_device(&self, request: &RegisterRequest) -> Result<Ipv4Addr> {
let mut conn = self let mut conn = self.get_connection().await?;
.valkey_client
.get_multiplexed_async_connection()
.await
.map_err(|e| Error::valkey_get_connection(e))?;
let peer_key = format!("peer:{}", request.public_key.as_str()); let peer_key = format!("peer:{}", request.public_key.as_str());
let existing_mesh_ip: Option<String> = conn let existing_mesh_ip: Option<String> = conn
@@ -85,11 +81,7 @@ impl StorageImpl for ValkeyStorage {
} }
async fn deregister_device(&self, public_key: &str) -> Result<()> { async fn deregister_device(&self, public_key: &str) -> Result<()> {
let mut conn = self let mut conn = self.get_connection().await?;
.valkey_client
.get_multiplexed_async_connection()
.await
.map_err(|e| Error::valkey_get_connection(e))?;
let hash_key = format!("peer:{public_key}"); let hash_key = format!("peer:{public_key}");
conn.srem("peers", public_key) conn.srem("peers", public_key)
.map_err(|e| Error::deregister_device(e, public_key)) .map_err(|e| Error::deregister_device(e, public_key))
@@ -104,21 +96,13 @@ impl StorageImpl for ValkeyStorage {
} }
async fn get_peers(&self) -> Result<Vec<Peer>> { async fn get_peers(&self) -> Result<Vec<Peer>> {
let mut conn = self let mut conn = self.get_connection().await?;
.valkey_client let keys: Vec<String> = self.get_public_keys().await?.into_iter().collect();
.get_multiplexed_async_connection()
.await
.map_err(|e| Error::valkey_get_connection(e))?;
let keys: HashSet<String> = conn
.smembers("peers")
.await
.map_err(|e| Error::get_peer(e))?;
if keys.is_empty() { if keys.is_empty() {
return Ok(vec![]); return Ok(vec![]);
} }
let keys: Vec<String> = keys.into_iter().collect();
let mut pipe = redis::pipe(); let mut pipe = redis::pipe();
for key in keys.iter() { for key in keys.iter() {
pipe.hgetall(format!("peer:{key}")); pipe.hgetall(format!("peer:{key}"));
@@ -152,15 +136,23 @@ impl StorageImpl for ValkeyStorage {
} }
impl ValkeyStorage { impl ValkeyStorage {
async fn get_connection(&self) -> Result<MultiplexedConnection> {
self.valkey_client
.get_multiplexed_async_connection()
.await
.map_err(|e| Error::valkey_get_connection(e))
}
async fn get_public_keys(&self) -> Result<HashSet<String>> {
let mut conn = self.get_connection().await?;
conn.smembers("peers").await.map_err(|e| Error::get_peer(e))
}
async fn allocate_mesh_ip( async fn allocate_mesh_ip(
&self, &self,
conn: &mut redis::aio::MultiplexedConnection, conn: &mut redis::aio::MultiplexedConnection,
) -> Result<Ipv4Addr> { ) -> Result<Ipv4Addr> {
let keys: HashSet<String> = conn let keys = self.get_public_keys().await?;
.smembers("peers")
.await
.map_err(|e| Error::get_peer(e))?;
let mut assigned_ips: HashSet<Ipv4Addr> = HashSet::new(); let mut assigned_ips: HashSet<Ipv4Addr> = HashSet::new();
if !keys.is_empty() { if !keys.is_empty() {