use tracing::{span, Level};
use dsf_rpc::{LocateInfo, LocateOptions};
use crate::daemon::Dsf;
use crate::error::Error;
use crate::io;
impl<C> Dsf<C>
where
C: io::Connector + Clone + Sync + Send + 'static,
{
pub async fn locate(&mut self, options: LocateOptions) -> Result<LocateInfo, Error> {
let span = span!(Level::DEBUG, "locate");
let _enter = span.enter();
let services = self.services();
if let Some(service) = services.info(&options.id) {
if service.origin {
return Ok(LocateInfo {
origin: true,
updated: false,
});
}
}
let pages = self.search(&options.id).await?;
debug!("locate, found {} pages", pages.len());
self.service_register(&options.id, pages)?;
Ok(LocateInfo {
origin: false,
updated: true,
})
}
}