summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author魏曹先生 <1992414357@qq.com>2026-03-19 21:39:03 +0800
committer魏曹先生 <1992414357@qq.com>2026-03-19 21:39:03 +0800
commita9e5c086584d3e697188be7003f564e7e2137135 (patch)
tree4ec7763405639ffab195b70b430e2f551431df6c
parent4d4083eb52397eb089f7e1edcc9b0817b27f1ef4 (diff)
Add method to convert local IDs to remote IDs
-rw-r--r--systems/workspace/src/workspace/manager/id_aliases.rs20
1 files changed, 19 insertions, 1 deletions
diff --git a/systems/workspace/src/workspace/manager/id_aliases.rs b/systems/workspace/src/workspace/manager/id_aliases.rs
index f3f83d2..a5a509c 100644
--- a/systems/workspace/src/workspace/manager/id_aliases.rs
+++ b/systems/workspace/src/workspace/manager/id_aliases.rs
@@ -1,5 +1,9 @@
use constants::workspace::dirs::workspace_dir_id_mapping;
-use sheet_system::index_source::{IndexSource, alias::IndexSourceAliasesManager};
+use sheet_system::index_source::{
+ IndexSource,
+ alias::{IndexSourceAliasesManager, convert_to_remote},
+ error::IDAliasError,
+};
use crate::workspace::{error::WorkspaceOperationError, manager::WorkspaceManager};
@@ -24,6 +28,20 @@ impl WorkspaceManager {
})
}
+ /// Attempt to convert a local ID to a remote ID.
+ pub async fn try_convert_to_remote(
+ &self,
+ local_id: u32,
+ ) -> Result<Option<u32>, WorkspaceOperationError> {
+ let aliases_dir = self.get_space().local_path(workspace_dir_id_mapping())?;
+ match convert_to_remote(aliases_dir, local_id).await {
+ Ok(remote_id) => Ok(Some(remote_id)),
+ Err(IDAliasError::AliasNotFound(_)) => Ok(None),
+ Err(IDAliasError::Io(e)) => Err(WorkspaceOperationError::Io(e)),
+ Err(e) => Err(WorkspaceOperationError::IDAliasError(e)),
+ }
+ }
+
/// Write a alias between local and remote IDs
pub async fn write_id_alias(
&self,