You can always generate this diagram based on latest code here.
flowchart TD
%% Core Modules Subgraph
subgraph "Core Modules"
CLI["CLI Controller (src/main.rs)"]
FUSE["FUSE Mount Integration (src/mount.rs)"]
FS["Encrypted Filesystem Core (src/encryptedfs)"]
CRYPTO["Cryptography Module (src/crypto)"]
KEY["Key Management (src/keyring.rs)"]
end
%% Supporting Utilities Subgraph
subgraph "Supporting Utilities"
ASYNC["Async Util (src/async_util.rs)"]
FSUTIL["FS Util (src/fs_util.rs)"]
LOG["Logging (src/log.rs)"]
STREAM["Stream Util (src/stream_util.rs)"]
EXPIRE["Expire Value (src/expire_value.rs)"]
end
%% External Interfaces Subgraph
subgraph "External Interfaces"
JAVA_BRIDGE["Java Bridge (java-bridge)"]
end
%% CI/CD and Testing Subgraph
subgraph "CI/CD and Testing"
WORKFLOWS["Workflows (.github/workflows/)"]
TESTS["Tests (tests/)"]
BENCHES["Benchmarks (benches/)"]
end
%% Detailed EncryptedFS Subgraph
subgraph "EncryptedFS Details"
ENC_CORE["Core Module (src/encryptedfs.rs)"]
ENC_BENCH["Bench File (src/encryptedfs/bench.rs)"]
ENC_TEST["Test File (src/encryptedfs/test.rs)"]
end
%% Detailed Cryptography Subgraph
subgraph "Cryptography Details"
CRYPTO_MAIN["Main Crypto (src/crypto.rs)"]
BUF_MUT["Buffer Mut (src/crypto/buf_mut.rs)"]
CRYPTO_READ["Crypto Read (src/crypto/read)"]
CRYPTO_WRITE["Crypto Write (src/crypto/write)"]
end
%% Detailed FUSE Mount Subgraph
subgraph "FUSE Mount Details"
FUSE_MAIN["Main Mount (src/mount.rs)"]
LINUX_MOUNT["Linux Mount (src/mount/linux.rs)"]
DUMMY_MOUNT["Dummy Mount (src/mount/dummy.rs)"]
end
%% Connections among Core Modules
CLI -->|"calls"| FUSE
FUSE -->|"invokes"| FS
FS -->|"performs encryption"| CRYPTO
FS -->|"retrieves keys"| KEY
CRYPTO -->|"requires keys"| KEY
%% Connections to Detailed subgraphs
FS --- ENC_CORE
ENC_CORE --- ENC_BENCH
ENC_CORE --- ENC_TEST
CRYPTO --- CRYPTO_MAIN
CRYPTO --- BUF_MUT
CRYPTO --- CRYPTO_READ
CRYPTO --- CRYPTO_WRITE
FUSE --- FUSE_MAIN
FUSE_MAIN --- LINUX_MOUNT
FUSE_MAIN --- DUMMY_MOUNT
%% Utilities support connections
FUSE ---|"utilizes"| ASYNC
FUSE ---|"utilizes"| FSUTIL
FUSE ---|"logs via"| LOG
FS ---|"uses"| FSUTIL
CRYPTO ---|"uses"| ASYNC
CRYPTO ---|"logs via"| LOG
KEY ---|"logs via"| LOG
KEY ---|"monitors"| EXPIRE
%% External Interface connection
JAVA_BRIDGE ---|"interfaces (FFI)"| FS
%% CI/CD and Testing connections (side note)
WORKFLOWS ---|"validates"| CLI
TESTS ---|"tests"| FS
BENCHES ---|"benchmarks"| ENC_BENCH
%% Click Events for Core Modules
click CLI "https://github.com/xoriors/rencfs/blob/main/src/main.rs"
click FS "https://github.com/xoriors/rencfs/blob/main/src/encryptedfs.rs"
click ENC_BENCH "https://github.com/xoriors/rencfs/blob/main/src/encryptedfs/bench.rs"
click ENC_TEST "https://github.com/xoriors/rencfs/blob/main/src/encryptedfs/test.rs"
click CRYPTO_MAIN "https://github.com/xoriors/rencfs/blob/main/src/crypto.rs"
click BUF_MUT "https://github.com/xoriors/rencfs/blob/main/src/crypto/buf_mut.rs"
click CRYPTO_READ "https://github.com/xoriors/rencfs/tree/main/src/crypto/read"
click CRYPTO_WRITE "https://github.com/xoriors/rencfs/tree/main/src/crypto/write"
click KEY "https://github.com/xoriors/rencfs/blob/main/src/keyring.rs"
click FUSE_MAIN "https://github.com/xoriors/rencfs/blob/main/src/mount.rs"
click LINUX_MOUNT "https://github.com/xoriors/rencfs/blob/main/src/mount/linux.rs"
click DUMMY_MOUNT "https://github.com/xoriors/rencfs/blob/main/src/mount/dummy.rs"
%% Click Events for Supporting Utilities
click ASYNC "https://github.com/xoriors/rencfs/blob/main/src/async_util.rs"
click FSUTIL "https://github.com/xoriors/rencfs/blob/main/src/fs_util.rs"
click LOG "https://github.com/xoriors/rencfs/blob/main/src/log.rs"
click STREAM "https://github.com/xoriors/rencfs/blob/main/src/stream_util.rs"
click EXPIRE "https://github.com/xoriors/rencfs/blob/main/src/expire_value.rs"
%% Click Events for External Interfaces
click JAVA_BRIDGE "https://github.com/xoriors/rencfs/tree/main/java-bridge/"
%% Click Events for CI/CD and Testing
click WORKFLOWS "https://github.com/xoriors/rencfs/tree/main/.github/workflows/"
click TESTS "https://github.com/xoriors/rencfs/tree/main/tests/"
click BENCHES "https://github.com/xoriors/rencfs/tree/main/benches/"
%% Styles
classDef cliStyle fill:#add8e6,stroke:#000,stroke-width:2px;
classDef fuseStyle fill:#90ee90,stroke:#000,stroke-width:2px;
classDef fsStyle fill:#dda0dd,stroke:#000,stroke-width:2px;
classDef cryptoStyle fill:#ffeb3b,stroke:#000,stroke-width:2px;
classDef keyStyle fill:#ffa500,stroke:#000,stroke-width:2px;
classDef utilStyle fill:#d3d3d3,stroke:#000,stroke-width:2px;
classDef extStyle fill:#ff69b4,stroke:#000,stroke-width:2px;
classDef ciStyle fill:#f0e68c,stroke:#000,stroke-width:2px;
class CLI cliStyle;
class FUSE,FUSE_MAIN,LINUX_MOUNT,DUMMY_MOUNT fuseStyle;
class FS,ENC_CORE,ENC_BENCH,ENC_TEST fsStyle;
class CRYPTO,CRYPTO_MAIN,BUF_MUT,CRYPTO_READ,CRYPTO_WRITE cryptoStyle;
class KEY keyStyle;
class ASYNC,FSUTIL,LOG,STREAM,EXPIRE utilStyle;
class JAVA_BRIDGE extStyle;
class WORKFLOWS,TESTS,BENCHES ciStyle;