refactor: let state use either local or backend
All checks were successful
continuous-integration/drone/push Build is passing
All checks were successful
continuous-integration/drone/push Build is passing
Signed-off-by: kjuulh <contact@kjuulh.io>
This commit is contained in:
@@ -24,13 +24,8 @@ impl UpdateGraphCommand {
|
||||
let now = std::time::SystemTime::now();
|
||||
dispatch.send(Msg::GraphUpdated(GraphUpdatedEvent::Initiated));
|
||||
|
||||
match self
|
||||
.querier
|
||||
.get_async(&root, path)
|
||||
.await
|
||||
.ok_or(anyhow::anyhow!("failed to find path"))
|
||||
{
|
||||
Ok(graph) => {
|
||||
match self.querier.get_async(&root, path).await {
|
||||
Ok(Some(graph)) => {
|
||||
dispatch.send(Msg::GraphUpdated(GraphUpdatedEvent::Optimistic(
|
||||
graph.clone(),
|
||||
)));
|
||||
@@ -42,6 +37,9 @@ impl UpdateGraphCommand {
|
||||
|
||||
dispatch.send(Msg::GraphUpdated(GraphUpdatedEvent::Success(graph)))
|
||||
}
|
||||
Ok(None) => dispatch.send(Msg::GraphUpdated(GraphUpdatedEvent::Failure(
|
||||
"graph was not found user root".into(),
|
||||
))),
|
||||
Err(e) => dispatch.send(Msg::GraphUpdated(GraphUpdatedEvent::Failure(
|
||||
format!("{e}"),
|
||||
))),
|
||||
|
@@ -114,7 +114,7 @@ impl<'a> GraphExplorer<'a> {
|
||||
.map(|p| p.split('.').collect::<Vec<_>>())
|
||||
.unwrap_or_default(),
|
||||
)
|
||||
.await
|
||||
.await?
|
||||
.ok_or(anyhow::anyhow!("graph should've had an item"))?;
|
||||
|
||||
self.inner.graph = Some(graph);
|
||||
|
@@ -13,12 +13,21 @@ pub struct State {
|
||||
pub querier: Querier,
|
||||
}
|
||||
|
||||
pub enum Backend {
|
||||
Local,
|
||||
Remote,
|
||||
}
|
||||
|
||||
impl State {
|
||||
pub fn new() -> anyhow::Result<Self> {
|
||||
pub async fn new(backend: Backend) -> anyhow::Result<Self> {
|
||||
let storage = Storage::new();
|
||||
let engine = storage.load()?;
|
||||
let events = Events::default();
|
||||
let engine = SharedEngine::from(engine);
|
||||
let querier = match backend {
|
||||
Backend::Local => Querier::local(&engine),
|
||||
Backend::Remote => Querier::remote().await?,
|
||||
};
|
||||
|
||||
Ok(Self {
|
||||
engine: engine.clone(),
|
||||
@@ -26,7 +35,7 @@ impl State {
|
||||
events: events.clone(),
|
||||
|
||||
commander: Commander::new(engine.clone(), storage, events)?,
|
||||
querier: Querier::local(&engine),
|
||||
querier,
|
||||
})
|
||||
}
|
||||
}
|
||||
|
@@ -8,6 +8,7 @@ mod remote;
|
||||
#[derive(Clone)]
|
||||
enum QuerierVariant {
|
||||
Local(local::Querier),
|
||||
Remote(remote::Querier),
|
||||
}
|
||||
|
||||
#[derive(Clone)]
|
||||
@@ -22,6 +23,12 @@ impl Querier {
|
||||
}
|
||||
}
|
||||
|
||||
pub async fn remote() -> anyhow::Result<Self> {
|
||||
Ok(Self {
|
||||
variant: QuerierVariant::Remote(remote::Querier::new().await?),
|
||||
})
|
||||
}
|
||||
|
||||
pub fn get(
|
||||
&self,
|
||||
root: &str,
|
||||
@@ -29,6 +36,7 @@ impl Querier {
|
||||
) -> Option<GraphItem> {
|
||||
match &self.variant {
|
||||
QuerierVariant::Local(querier) => querier.get(root, path),
|
||||
QuerierVariant::Remote(_) => todo!(),
|
||||
}
|
||||
}
|
||||
|
||||
@@ -36,15 +44,24 @@ impl Querier {
|
||||
&self,
|
||||
root: &str,
|
||||
path: impl IntoIterator<Item = impl Into<String>>,
|
||||
) -> Option<GraphItem> {
|
||||
) -> anyhow::Result<Option<GraphItem>> {
|
||||
match &self.variant {
|
||||
QuerierVariant::Local(querier) => querier.get(root, path),
|
||||
QuerierVariant::Local(querier) => Ok(querier.get(root, path)),
|
||||
QuerierVariant::Remote(querier) => querier.get(root, path).await,
|
||||
}
|
||||
}
|
||||
|
||||
pub fn get_available_roots(&self) -> Option<Vec<String>> {
|
||||
match &self.variant {
|
||||
QuerierVariant::Local(querier) => querier.get_available_roots(),
|
||||
QuerierVariant::Remote(_) => todo!(),
|
||||
}
|
||||
}
|
||||
|
||||
pub async fn get_available_roots_async(&self) -> anyhow::Result<Option<Vec<String>>> {
|
||||
match &self.variant {
|
||||
QuerierVariant::Local(querier) => Ok(querier.get_available_roots()),
|
||||
QuerierVariant::Remote(querier) => Ok(querier.get_available_roots().await),
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@@ -6,6 +6,7 @@ use itertools::Itertools;
|
||||
use tonic::transport::Channel;
|
||||
|
||||
#[allow(dead_code)]
|
||||
#[derive(Clone)]
|
||||
pub struct Querier {
|
||||
channel: Channel,
|
||||
}
|
||||
|
Reference in New Issue
Block a user