mirror of
https://github.com/edera-dev/krata.git
synced 2025-08-03 05:10:55 +00:00
31 lines
915 B
Rust
31 lines
915 B
Rust
use anyhow::Result;
|
|
use krata::v1::common::Zone;
|
|
use krata::v1::control::{ResolveZoneIdReply, ResolveZoneIdRequest};
|
|
|
|
use crate::db::zone::ZoneStore;
|
|
|
|
pub struct ResolveZoneIdRpc {
|
|
zones: ZoneStore,
|
|
}
|
|
|
|
impl ResolveZoneIdRpc {
|
|
pub fn new(zones: ZoneStore) -> Self {
|
|
Self { zones }
|
|
}
|
|
|
|
pub async fn process(self, request: ResolveZoneIdRequest) -> Result<ResolveZoneIdReply> {
|
|
let zones = self.zones.list().await?;
|
|
let zones = zones
|
|
.into_values()
|
|
.filter(|x| {
|
|
let comparison_spec = x.spec.as_ref().cloned().unwrap_or_default();
|
|
(!request.name.is_empty() && comparison_spec.name == request.name)
|
|
|| x.id == request.name
|
|
})
|
|
.collect::<Vec<Zone>>();
|
|
Ok(ResolveZoneIdReply {
|
|
zone_id: zones.first().cloned().map(|x| x.id).unwrap_or_default(),
|
|
})
|
|
}
|
|
}
|