From 89d228816f3f9f31a2c66fa21f97f958195cbe6d Mon Sep 17 00:00:00 2001 From: 魏曹先生 <1992414357@qq.com> Date: Mon, 12 Jan 2026 05:03:51 +0800 Subject: Move duplicate constants to constants.rs --- data/src/constants.rs | 22 +++++++++++++++++++ data/src/data/local.rs | 9 +++----- data/src/data/local/cached_sheet.rs | 26 +++++++++++----------- data/src/data/local/config.rs | 9 ++++---- data/src/data/local/latest_file_data.rs | 6 ++---- data/src/data/local/latest_info.rs | 6 ++---- data/src/data/sheet.rs | 6 ++---- data/src/data/user/accounts.rs | 12 +++++------ data/src/data/vault/sheet_share.rs | 12 +++++------ data/src/data/vault/virtual_file.rs | 38 ++++++++++++++------------------- 10 files changed, 74 insertions(+), 72 deletions(-) (limited to 'data') diff --git a/data/src/constants.rs b/data/src/constants.rs index 3d839a6..bc3343f 100644 --- a/data/src/constants.rs +++ b/data/src/constants.rs @@ -9,6 +9,15 @@ pub const PORT: u16 = 25331; // Vault Host Name pub const VAULT_HOST_NAME: &str = "host"; +// Default Virtual File Version and Direction +pub const DEFAULT_VF_VERSION: &str = "0.1.0"; +pub const DEFAULT_VF_DESCRIPTION: &str = "_"; + +// ------------------------------------------------------------------------------------- + +// Prefix +pub const VF_PREFIX: &str = "vf-"; + // ------------------------------------------------------------------------------------- // Suffix @@ -38,6 +47,19 @@ pub const CLIENT_SUFFIX_CACHED_SHEET_FILE_NO_DOT: &str = "st"; // ------------------------------------------------------------------------------------- +// Keys +pub const KEY_SHEET_NAME: &str = "{sheet_name}"; +pub const KEY_MEMBER_ID: &str = "{member_id}"; +pub const KEY_TEMP_NAME: &str = "{temp_name}"; +pub const KEY_VF_INDEX: &str = "{vf_index}"; +pub const KEY_VF_ID: &str = "{vf_id}"; +pub const KEY_VF_VERSION: &str = "{vf_version}"; +pub const KEY_ACCOUNT: &str = "{account}"; +pub const KEY_SELF_ID: &str = "{self_id}"; +pub const KEY_SHARE_ID: &str = "{share_id}"; + +// ------------------------------------------------------------------------------------- + // Server // Server - Vault (Main) pub const SERVER_FILE_VAULT: &str = "./vault.toml"; diff --git a/data/src/data/local.rs b/data/src/data/local.rs index 67f3943..0927e3f 100644 --- a/data/src/data/local.rs +++ b/data/src/data/local.rs @@ -14,7 +14,7 @@ use crate::{ constants::{ CLIENT_CONTENT_GITIGNORE, CLIENT_FILE_GITIGNORE, CLIENT_FILE_LOCAL_SHEET, CLIENT_FILE_TODOLIST, CLIENT_FILE_WORKSPACE, CLIENT_FOLDER_WORKSPACE_ROOT_NAME, - CLIENT_PATH_LOCAL_SHEET, CLIENT_SUFFIX_LOCAL_SHEET_FILE, + CLIENT_PATH_LOCAL_SHEET, CLIENT_SUFFIX_LOCAL_SHEET_FILE, KEY_ACCOUNT, KEY_SHEET_NAME, }, current::{current_local_path, find_local_path}, data::{ @@ -37,9 +37,6 @@ pub mod local_sheet; pub mod vault_modified; pub mod workspace_analyzer; -const SHEET_NAME: &str = "{sheet_name}"; -const ACCOUNT_NAME: &str = "{account}"; - pub struct LocalWorkspace { config: Arc>, local_path: PathBuf, @@ -120,8 +117,8 @@ impl LocalWorkspace { pub fn local_sheet_path(&self, member: &MemberId, sheet: &SheetName) -> PathBuf { self.local_path.join( CLIENT_FILE_LOCAL_SHEET - .replace(ACCOUNT_NAME, member) - .replace(SHEET_NAME, sheet), + .replace(KEY_ACCOUNT, member) + .replace(KEY_SHEET_NAME, sheet), ) } diff --git a/data/src/data/local/cached_sheet.rs b/data/src/data/local/cached_sheet.rs index 39f9814..8394006 100644 --- a/data/src/data/local/cached_sheet.rs +++ b/data/src/data/local/cached_sheet.rs @@ -7,6 +7,7 @@ use tokio::fs; use crate::{ constants::{ CLIENT_FILE_CACHED_SHEET, CLIENT_PATH_CACHED_SHEET, CLIENT_SUFFIX_CACHED_SHEET_FILE, + KEY_SHEET_NAME, }, current::current_local_path, data::sheet::{SheetData, SheetName}, @@ -14,9 +15,6 @@ use crate::{ pub type CachedSheetPathBuf = PathBuf; -const SHEET_NAME: &str = "{sheet_name}"; -const ACCOUNT_NAME: &str = "{account}"; - /// # Cached Sheet /// The cached sheet is a read-only version cloned from the upstream repository to the local environment, /// automatically generated during update operations, @@ -43,7 +41,7 @@ impl CachedSheet { let current_workspace = current_local_path()?; Some( current_workspace - .join(CLIENT_FILE_CACHED_SHEET.replace(SHEET_NAME, &sheet_name.to_string())), + .join(CLIENT_FILE_CACHED_SHEET.replace(KEY_SHEET_NAME, &sheet_name.to_string())), ) } @@ -57,12 +55,13 @@ impl CachedSheet { if path.is_file() && let Some(file_name) = path.file_name().and_then(|n| n.to_str()) - && file_name.ends_with(CLIENT_SUFFIX_CACHED_SHEET_FILE) { - let name_without_ext = file_name - .trim_end_matches(CLIENT_SUFFIX_CACHED_SHEET_FILE) - .to_string(); - sheet_names.push(name_without_ext); - } + && file_name.ends_with(CLIENT_SUFFIX_CACHED_SHEET_FILE) + { + let name_without_ext = file_name + .trim_end_matches(CLIENT_SUFFIX_CACHED_SHEET_FILE) + .to_string(); + sheet_names.push(name_without_ext); + } } Ok(sheet_names) @@ -84,9 +83,10 @@ impl CachedSheet { if path.is_file() && let Some(file_name) = path.file_name().and_then(|n| n.to_str()) - && file_name.ends_with(CLIENT_SUFFIX_CACHED_SHEET_FILE) { - sheet_paths.push(format_path(workspace_path.join(path))?); - } + && file_name.ends_with(CLIENT_SUFFIX_CACHED_SHEET_FILE) + { + sheet_paths.push(format_path(workspace_path.join(path))?); + } } Ok(sheet_paths) diff --git a/data/src/data/local/config.rs b/data/src/data/local/config.rs index 8a89c20..08c25ff 100644 --- a/data/src/data/local/config.rs +++ b/data/src/data/local/config.rs @@ -11,6 +11,8 @@ use crate::constants::CLIENT_FILE_WORKSPACE; use crate::constants::CLIENT_FOLDER_WORKSPACE_ROOT_NAME; use crate::constants::CLIENT_PATH_LOCAL_DRAFT; use crate::constants::CLIENT_PATH_WORKSPACE_ROOT; +use crate::constants::KEY_ACCOUNT; +use crate::constants::KEY_SHEET_NAME; use crate::constants::PORT; use crate::current::current_local_path; use crate::data::local::latest_info::LatestInfo; @@ -18,9 +20,6 @@ use crate::data::member::MemberId; use crate::data::sheet::SheetName; use crate::data::vault::config::VaultUuid; -const ACCOUNT: &str = "{account}"; -const SHEET_NAME: &str = "{sheet_name}"; - #[derive(Serialize, Deserialize, ConfigFile, Clone)] #[cfg_file(path = CLIENT_FILE_WORKSPACE)] pub struct LocalConfig { @@ -351,8 +350,8 @@ impl LocalConfig { let account_str = snake_case!(account.as_str()); let sheet_name_str = snake_case!(sheet_name.as_str()); let draft_path = CLIENT_PATH_LOCAL_DRAFT - .replace(ACCOUNT, &account_str) - .replace(SHEET_NAME, &sheet_name_str); + .replace(KEY_ACCOUNT, &account_str) + .replace(KEY_SHEET_NAME, &sheet_name_str); local_workspace_path.into().join(draft_path) } diff --git a/data/src/data/local/latest_file_data.rs b/data/src/data/local/latest_file_data.rs index 21c647c..95de015 100644 --- a/data/src/data/local/latest_file_data.rs +++ b/data/src/data/local/latest_file_data.rs @@ -4,7 +4,7 @@ use cfg_file::ConfigFile; use serde::{Deserialize, Serialize}; use crate::{ - constants::{CLIENT_FILE_LATEST_DATA, CLIENT_FILE_MEMBER_HELD_NOSET}, + constants::{CLIENT_FILE_LATEST_DATA, CLIENT_FILE_MEMBER_HELD_NOSET, KEY_ACCOUNT}, current::current_local_path, data::{ member::MemberId, @@ -12,8 +12,6 @@ use crate::{ }, }; -const ACCOUNT: &str = "{account}"; - /// # Latest file data /// Records the file holder and the latest version for permission and update checks #[derive(Debug, Default, Clone, Serialize, Deserialize, ConfigFile)] @@ -54,7 +52,7 @@ impl LatestFileData { "Workspace not found.", )); }; - Ok(local_path.join(CLIENT_FILE_LATEST_DATA.replace(ACCOUNT, account))) + Ok(local_path.join(CLIENT_FILE_LATEST_DATA.replace(KEY_ACCOUNT, account))) } /// Get the member who holds the file with the given ID. diff --git a/data/src/data/local/latest_info.rs b/data/src/data/local/latest_info.rs index e11836b..ec1e482 100644 --- a/data/src/data/local/latest_info.rs +++ b/data/src/data/local/latest_info.rs @@ -8,7 +8,7 @@ use cfg_file::ConfigFile; use serde::{Deserialize, Serialize}; use crate::{ - constants::{CLIENT_FILE_LATEST_INFO, CLIENT_FILE_LATEST_INFO_NOSET}, + constants::{CLIENT_FILE_LATEST_INFO, CLIENT_FILE_LATEST_INFO_NOSET, KEY_ACCOUNT}, data::{ member::{Member, MemberId}, sheet::{SheetData, SheetName, SheetPathBuf}, @@ -19,8 +19,6 @@ use crate::{ }, }; -const ACCOUNT: &str = "{account}"; - /// # Latest Info /// Locally cached latest information, /// used to cache personal information from upstream for querying and quickly retrieving member information. @@ -69,7 +67,7 @@ pub struct LatestInfo { impl LatestInfo { /// Get the path to the latest info file for a given workspace and member ID pub fn latest_info_path(local_workspace_path: &Path, member_id: &MemberId) -> PathBuf { - local_workspace_path.join(CLIENT_FILE_LATEST_INFO.replace(ACCOUNT, member_id)) + local_workspace_path.join(CLIENT_FILE_LATEST_INFO.replace(KEY_ACCOUNT, member_id)) } } diff --git a/data/src/data/sheet.rs b/data/src/data/sheet.rs index 64b1985..8b427e9 100644 --- a/data/src/data/sheet.rs +++ b/data/src/data/sheet.rs @@ -4,7 +4,7 @@ use cfg_file::{ConfigFile, config::ConfigFile}; use serde::{Deserialize, Serialize}; use crate::{ - constants::SERVER_FILE_SHEET, + constants::{KEY_SHEET_NAME, SERVER_FILE_SHEET}, data::{ member::MemberId, vault::{ @@ -17,8 +17,6 @@ use crate::{ pub type SheetName = String; pub type SheetPathBuf = PathBuf; -const SHEET_NAME: &str = "{sheet_name}"; - pub struct Sheet<'a> { /// The name of the current sheet pub(crate) name: SheetName, @@ -233,7 +231,7 @@ impl<'a> Sheet<'a> { pub fn sheet_path_with_name(vault: &Vault, name: impl AsRef) -> PathBuf { vault .vault_path() - .join(SERVER_FILE_SHEET.replace(SHEET_NAME, name.as_ref())) + .join(SERVER_FILE_SHEET.replace(KEY_SHEET_NAME, name.as_ref())) } /// Clone the data of the sheet diff --git a/data/src/data/user/accounts.rs b/data/src/data/user/accounts.rs index d77bc02..def2677 100644 --- a/data/src/data/user/accounts.rs +++ b/data/src/data/user/accounts.rs @@ -7,15 +7,13 @@ use std::{ use cfg_file::config::ConfigFile; use crate::{ - constants::{USER_FILE_ACCOUNTS, USER_FILE_KEY, USER_FILE_MEMBER}, + constants::{KEY_SELF_ID, USER_FILE_ACCOUNTS, USER_FILE_KEY, USER_FILE_MEMBER}, data::{ member::{Member, MemberId}, user::UserDirectory, }, }; -const SELF_ID: &str = "{self_id}"; - /// Account Management impl UserDirectory { /// Read account from configuration file @@ -32,7 +30,7 @@ impl UserDirectory { pub fn account_ids(&self) -> Result, std::io::Error> { let accounts_path = self .local_path - .join(USER_FILE_ACCOUNTS.replace(SELF_ID, "")); + .join(USER_FILE_ACCOUNTS.replace(KEY_SELF_ID, "")); if !accounts_path.exists() { return Ok(Vec::new()); @@ -96,7 +94,7 @@ impl UserDirectory { // Ensure accounts directory exists let accounts_dir = self .local_path - .join(USER_FILE_ACCOUNTS.replace(SELF_ID, "")); + .join(USER_FILE_ACCOUNTS.replace(KEY_SELF_ID, "")); if !accounts_dir.exists() { fs::create_dir_all(&accounts_dir)?; } @@ -153,12 +151,12 @@ impl UserDirectory { /// Get the account's configuration file path, but do not check if the file exists pub fn account_cfg_path(&self, id: &MemberId) -> PathBuf { self.local_path - .join(USER_FILE_MEMBER.replace(SELF_ID, id.to_string().as_str())) + .join(USER_FILE_MEMBER.replace(KEY_SELF_ID, id.to_string().as_str())) } /// Get the account's private key file path, but do not check if the file exists pub fn account_private_key_path(&self, id: &MemberId) -> PathBuf { self.local_path - .join(USER_FILE_KEY.replace(SELF_ID, id.to_string().as_str())) + .join(USER_FILE_KEY.replace(KEY_SELF_ID, id.to_string().as_str())) } } diff --git a/data/src/data/vault/sheet_share.rs b/data/src/data/vault/sheet_share.rs index 1e692f1..5d27859 100644 --- a/data/src/data/vault/sheet_share.rs +++ b/data/src/data/vault/sheet_share.rs @@ -8,7 +8,8 @@ use tokio::fs; use crate::{ constants::{ - SERVER_FILE_SHEET_SHARE, SERVER_PATH_SHARES, SERVER_SUFFIX_SHEET_SHARE_FILE_NO_DOT, + KEY_SHARE_ID, KEY_SHEET_NAME, SERVER_FILE_SHEET_SHARE, SERVER_PATH_SHARES, + SERVER_SUFFIX_SHEET_SHARE_FILE_NO_DOT, }, data::{ member::MemberId, @@ -19,9 +20,6 @@ use crate::{ pub type SheetShareId = String; -const SHEET_NAME: &str = "{sheet_name}"; -const SHARE_ID: &str = "{share_id}"; - #[derive(Default, Serialize, Deserialize, ConfigFile, Clone, Debug)] pub struct Share { /// Sharer: the member who created this share item @@ -87,8 +85,8 @@ impl Vault { // Format the path to remove "./" prefix and normalize it let path_str = SERVER_FILE_SHEET_SHARE - .replace(SHEET_NAME, &sheet_name) - .replace(SHARE_ID, &share_id); + .replace(KEY_SHEET_NAME, &sheet_name) + .replace(KEY_SHARE_ID, &share_id); // Use format_path to normalize the path match format_path::format_path_str(&path_str) { @@ -105,7 +103,7 @@ impl Vault { let sheet_name = snake_case!(sheet_name.clone()); let shares_dir = self .vault_path() - .join(SERVER_PATH_SHARES.replace(SHEET_NAME, &sheet_name)); + .join(SERVER_PATH_SHARES.replace(KEY_SHEET_NAME, &sheet_name)); let mut result = Vec::new(); if let Ok(mut entries) = fs::read_dir(shares_dir).await { diff --git a/data/src/data/vault/virtual_file.rs b/data/src/data/vault/virtual_file.rs index 8dbcb5d..28e9172 100644 --- a/data/src/data/vault/virtual_file.rs +++ b/data/src/data/vault/virtual_file.rs @@ -13,8 +13,9 @@ use uuid::Uuid; use crate::{ constants::{ - SERVER_FILE_VF_META, SERVER_FILE_VF_VERSION_INSTANCE, SERVER_PATH_VF_ROOT, - SERVER_PATH_VF_STORAGE, SERVER_PATH_VF_TEMP, + DEFAULT_VF_DESCRIPTION, DEFAULT_VF_VERSION, KEY_TEMP_NAME, KEY_VF_ID, KEY_VF_INDEX, + KEY_VF_VERSION, SERVER_FILE_VF_META, SERVER_FILE_VF_VERSION_INSTANCE, SERVER_PATH_VF_ROOT, + SERVER_PATH_VF_STORAGE, SERVER_PATH_VF_TEMP, VF_PREFIX, }, data::{member::MemberId, vault::Vault}, }; @@ -22,12 +23,6 @@ use crate::{ pub type VirtualFileId = String; pub type VirtualFileVersion = String; -const VF_PREFIX: &str = "vf-"; -const ID_PARAM: &str = "{vf_id}"; -const ID_INDEX: &str = "{vf_index}"; -const VERSION_PARAM: &str = "{vf_version}"; -const TEMP_NAME: &str = "{temp_name}"; - pub struct VirtualFile<'a> { /// Unique identifier for the virtual file id: VirtualFileId, @@ -82,7 +77,7 @@ impl Vault { pub fn virtual_file_temp_path(&self) -> PathBuf { let random_receive_name = format!("{}", uuid::Uuid::new_v4()); self.vault_path - .join(SERVER_PATH_VF_TEMP.replace(TEMP_NAME, &random_receive_name)) + .join(SERVER_PATH_VF_TEMP.replace(KEY_TEMP_NAME, &random_receive_name)) } /// Get the directory where virtual files are stored @@ -94,8 +89,8 @@ impl Vault { pub fn virtual_file_dir(&self, id: &VirtualFileId) -> Result { Ok(self.vault_path().join( SERVER_PATH_VF_STORAGE - .replace(ID_PARAM, &id.to_string()) - .replace(ID_INDEX, &Self::vf_index(id)?), + .replace(KEY_VF_ID, &id.to_string()) + .replace(KEY_VF_INDEX, &Self::vf_index(id)?), )) } @@ -145,9 +140,9 @@ impl Vault { ) -> PathBuf { self.vault_path().join( SERVER_FILE_VF_VERSION_INSTANCE - .replace(ID_PARAM, &id.to_string()) - .replace(ID_INDEX, &Self::vf_index(id).unwrap_or_default()) - .replace(VERSION_PARAM, &version.to_string()), + .replace(KEY_VF_ID, &id.to_string()) + .replace(KEY_VF_INDEX, &Self::vf_index(id).unwrap_or_default()) + .replace(KEY_VF_VERSION, &version.to_string()), ) } @@ -155,8 +150,8 @@ impl Vault { pub fn virtual_file_meta_path(&self, id: &VirtualFileId) -> PathBuf { self.vault_path().join( SERVER_FILE_VF_META - .replace(ID_PARAM, &id.to_string()) - .replace(ID_INDEX, &Self::vf_index(id).unwrap_or_default()), + .replace(KEY_VF_ID, &id.to_string()) + .replace(KEY_VF_INDEX, &Self::vf_index(id).unwrap_or_default()), ) } @@ -211,10 +206,9 @@ impl Vault { instance: &mut ConnectionInstance, member_id: &MemberId, ) -> Result { - const FIRST_VERSION: &str = "0.1.0"; let receive_path = self.virtual_file_temp_path(); let new_id = format!("{}{}", VF_PREFIX, Uuid::new_v4()); - let move_path = self.virtual_file_real_path(&new_id, &FIRST_VERSION.to_string()); + let move_path = self.virtual_file_real_path(&new_id, &DEFAULT_VF_VERSION.to_string()); match instance.read_file(receive_path.clone()).await { Ok(_) => { @@ -223,22 +217,22 @@ impl Vault { let mut version_description = HashMap::::new(); version_description.insert( - FIRST_VERSION.to_string(), + DEFAULT_VF_VERSION.to_string(), VirtualFileVersionDescription { creator: member_id.clone(), - description: "Track".to_string(), + description: DEFAULT_VF_DESCRIPTION.to_string(), }, ); // Create metadata let mut meta = VirtualFileMeta { - current_version: FIRST_VERSION.to_string(), + current_version: DEFAULT_VF_VERSION.to_string(), hold_member: member_id.clone(), // The holder of the newly created virtual file is the creator by default version_description, histories: Vec::default(), }; // Add first version - meta.histories.push(FIRST_VERSION.to_string()); + meta.histories.push(DEFAULT_VF_VERSION.to_string()); // Write metadata to file VirtualFileMeta::write_to(&meta, self.virtual_file_meta_path(&new_id)).await?; -- cgit