Return Result from fallible registry functions
This updates the registry add_* functions to return a Result instead of
a bool on failure to force handling errors. The placeholder error is
used temporarily.
Change-Id: If9db8c2a442f75f2a0746e1774b7b3c6455bcbe5
Reviewed-on: https://pigweed-review.googlesource.com/c/pigweed/qg/+/125211
Commit-Queue: Alexei Frolov <frolv@google.com>
Reviewed-by: Erik Gilling <konkers@google.com>
diff --git a/qg/src/project/mod.rs b/qg/src/project/mod.rs
index 430eee6..8d76556 100644
--- a/qg/src/project/mod.rs
+++ b/qg/src/project/mod.rs
@@ -191,7 +191,7 @@
root_manifest_file.path(),
false,
);
- registry.add_provider(project_provider);
+ registry.add_provider(project_provider)?;
for (name, target) in root_manifest.targets {
registry.add_target(crate::Target::from_manifest(
@@ -199,7 +199,7 @@
&root_manifest.project.name,
target.namespace.is_global(),
target,
- )?);
+ )?)?;
}
for (provider, desc) in &root_manifest.providers {
@@ -217,7 +217,7 @@
provider,
provider_file.path(),
global_provider,
- ));
+ ))?;
for (name, target) in provider_data.targets {
registry.add_target(crate::Target::from_manifest(
@@ -225,7 +225,7 @@
provider,
global_provider || target.namespace.is_global(),
target,
- )?);
+ )?)?;
}
}
}
diff --git a/qg/src/registry.rs b/qg/src/registry.rs
index 376e0f7..8c3aa74 100644
--- a/qg/src/registry.rs
+++ b/qg/src/registry.rs
@@ -18,6 +18,7 @@
};
use crate::target::{Provider, Target};
+use crate::{Error, Result};
/// A database of packages known to `qg`.
#[derive(Debug)]
@@ -54,16 +55,21 @@
self.targets.values().map(Arc::as_ref)
}
- pub(crate) fn add_provider(&mut self, provider: Provider) -> bool {
- self.providers
- .insert(provider.name.clone(), provider)
- .is_none()
+ /// Registers a new provider.
+ pub(crate) fn add_provider(&mut self, provider: Provider) -> Result<()> {
+ if self.providers.contains_key(&provider.name) {
+ // TODO(frolv): Provider names must be unique.
+ return Err(Error::GenericErrorPlaceholder);
+ }
+ self.providers.insert(provider.name.clone(), provider);
+ Ok(())
}
/// Inserts a target into the registry.
- pub(crate) fn add_target(&mut self, target: Target) -> bool {
+ pub(crate) fn add_target(&mut self, target: Target) -> Result<()> {
if !self.providers.contains_key(target.provider()) {
- return false;
+ // TODO(frolv): Target must have a known provider.
+ return Err(Error::GenericErrorPlaceholder);
};
let target_name = target.full_name();
@@ -80,7 +86,7 @@
let target = Arc::new(target);
self.targets.insert(target_name, target);
- true
+ Ok(())
}
}