diff options
| author | 魏曹先生 <1992414357@qq.com> | 2026-02-06 02:06:53 +0800 |
|---|---|---|
| committer | 魏曹先生 <1992414357@qq.com> | 2026-02-06 02:06:53 +0800 |
| commit | 520925836243b9c3e60f199f11374b3eddbe3fae (patch) | |
| tree | 79856008574ca11dab9c81b577d6633fbbcfad51 /systems/_constants/src | |
| parent | 152ce138bf7cb21d9579749afa16ee7c41c80518 (diff) | |
Add constants system with path generation macros
Diffstat (limited to 'systems/_constants/src')
| -rw-r--r-- | systems/_constants/src/lib.rs | 147 |
1 files changed, 147 insertions, 0 deletions
diff --git a/systems/_constants/src/lib.rs b/systems/_constants/src/lib.rs new file mode 100644 index 0000000..e73f81f --- /dev/null +++ b/systems/_constants/src/lib.rs @@ -0,0 +1,147 @@ +#[macro_export] +macro_rules! c { + ($name:ident = $value:expr) => { + const $name: &str = $value; + }; +} + +/// File and directory path constants for the server root +#[allow(unused)] +pub mod server { + /// File constants + #[macros::constants("server_file")] + pub mod files { + c! { CONFIG = "./config.toml" } + c! { JOIN_REQUEST_KEY = "./.temp/join_requests/{member_name}.pem" } + c! { KEY = "./keys/{member_name}.pem" } + c! { MEMBER_METADATA = "./meta/{member_name}.toml" } + } + + /// Directory path constants + #[macros::constants("server_dir")] + pub mod dirs { + c! { KEYS = "./key/" } + c! { JOIN_REQUEST_KEYS = "./.temp/join_requests/" } + c! { MEMBER_METADATAS = "./meta/" } + c! { VAULTS = "./v/" } + } +} + +/// File and directory path constants for the vault root +#[allow(unused)] +pub mod vault { + /// File path constants + #[macros::constants("vault_file")] + pub mod files { + // ### Configs ### + c! { CONFIG = "./vault.toml" } + + // ### Sheets ### + + // Reference sheet + c! { REFSHEET = "./ref/{ref_sheet_name}.sheet" } + + // Editable instance of a reference sheet, maintained by one of the vault's Hosts, written back to the sheet file after editing + c! { REFSHEET_EDIT = "./ref/~{ref_sheet_name}.sheet" } + + // Member sheet backup, only used to temporarily store a member's local workspace file structure, fully controlled by the corresponding member + c! { MEMBER_SHEET_BACKUP = "./_member/{member_name}/backups/{sheet_name}.sheet" } + + // Share sent to a reference sheet, selectively merged into that reference sheet by a Host + c! { SHARE_TO_REF = "./req/{ref_sheet_name}/{share_id}.sheet" } + + // Share sent to a specific member, fully controlled by that member, who can optionally merge it into any of their own sheets + c! { SHARE_TO_MEMBER = "./_member/{member_name}/shares/{share_id}.sheet" } + + // ### Storages ### + c! { CHANGE_FILE = "./changes/CURRENT" } + c! { CHANGE_FILE_BACKUP = "./changes/backup.{index}" } + + // Whether an index is locked; if the file exists, the member name written inside is the current holder + c! { INDEX_LOCK = "./index/{index_slice_1}/{index_slice_2}/{index_name}/LOCK" } + + // Editable instance of an index's version sequence, maintained by the holder, written back to the ver file after editing + c! { INDEX_VER_EDIT = "./index/{index_slice_1}/{index_slice_2}/{index_name}/~ver" } + + // Index version sequence + c! { INDEX_VER = "./index/{index_slice_1}/{index_slice_2}/{index_name}/ver" } + + // Index + c! { INDEX = "./index/{index_slice_1}/{index_slice_2}/{index_name}/{version}.index" } + + // Object, file chunk + c! { OBJ = "./obj/{obj_hash_slice_1}/{obj_hash_slice_2}/{obj_hash}" } + } + + /// Directory path constants + #[macros::constants("vault_dir")] + pub mod dirs { + c! { REFSHEETS = "./ref/" } + c! { SHARES_TO_REF = "./req/{ref_sheet_name}/" } + c! { MEMBER = "./_member/{member_name}/" } + c! { MEMBER_SHEET_BACKUPS = "./_member/{member_name}/backups/" } + c! { MEMBER_SHARES = "./_member/{member_name}/shares/" } + c! { CHANGES = "./changes/" } + } +} + +/// File and directory path constants for the workspace root +#[allow(unused)] +pub mod workspace { + /// File path constants + #[macros::constants("workspace_file")] + pub mod files { + // ### Config ### + c! { CONFIG = "./.jv/workspace.toml" } + + // ### Sheets ### + // Records the latest state of local physical files, used to calculate deviations + c! { LOCAL_STATUS = "./.jv/sheets/{account}/{sheet}.local" } + + // Personal sheet, represents the desired file structure, held only by the member, can be backed up to the vault + c! { SHEET = "./.jv/sheets/{account}/{sheet}.sheet" } + + // Draft file, when switching to another sheet, fully records modified but untracked files + c! { DRAFTED_FILE = "./.jv/drafts/{account}_{sheet}/{mapping}" } + + // Working file + c! { WORKING_FILE = "./{mapping}" } + } + + /// Directory path constants + #[macros::constants("workspace_dir")] + pub mod dirs { + c! { WORKSPACE = "./.jv" } + c! { VAULT_MIRROR = "./.jv/UPSTREAM/" } + c! { LOCAL_SHEETS = "./.jv/sheets/{account}/" } + c! { DRAFT_AREA = "./.jv/drafts/{account}_{sheet}/" } + c! { WORKING_AREA = "./" } + } +} + +/// File and directory path constants for the user root +#[allow(unused)] +pub mod user { + /// File path constants + #[macros::constants("user_file")] + pub mod files { + // Upstream public key, stored after initial login, used to verify the trustworthiness of that upstream + c! { UPSTREAM_PUB = "./upstreams/{upstream_addr}.pem" } + + // Account private key, stored only locally, used for login authentication + c! { PRIVATE_KEY = "./private/{account}.pem" } + + // Account public key, automatically generated from the private key and stored, + // will be placed into the server's "join request list" upon initial login (if server.toml permits this action) + // The server administrator can optionally approve this request + c! { PUBLIC_KEY = "./public/{account}.pem" } + } + + /// Directory path constants + #[macros::constants("user_dir")] + pub mod dirs { + c! { UPSTREAM_PUBS = "./upstreams/" } + c! { PRIVATE_KEYS = "./private/" } + c! { PUBLIC_KEYS = "./public/" } + } +} |
