diff options
| author | 魏曹先生 <1992414357@qq.com> | 2026-03-18 11:19:51 +0800 |
|---|---|---|
| committer | 魏曹先生 <1992414357@qq.com> | 2026-03-18 11:19:51 +0800 |
| commit | 2372495e1a0acb9ffead7651d8ed36a3bb98a15b (patch) | |
| tree | 5f330cdf1616b1e56a7b85b2b2530cdf1422ed54 /protocol/src/context.rs | |
| parent | 6f8906f06f3efd009275dc23f861f5aaba76ce72 (diff) | |
Add new protocol crate with basic types and operations
Diffstat (limited to 'protocol/src/context.rs')
| -rw-r--r-- | protocol/src/context.rs | 71 |
1 files changed, 71 insertions, 0 deletions
diff --git a/protocol/src/context.rs b/protocol/src/context.rs new file mode 100644 index 0000000..4fdddb9 --- /dev/null +++ b/protocol/src/context.rs @@ -0,0 +1,71 @@ +use framework::space::{Space, SpaceRoot}; + +pub struct ProtocolContext<User, Server> +where + User: SpaceRoot, + Server: SpaceRoot, +{ + /// Current context's Vault + pub remote: Option<Space<Server>>, + + /// Current context's Workspace + pub user: Option<Space<User>>, +} + +impl<User, Server> ProtocolContext<User, Server> +where + User: SpaceRoot, + Server: SpaceRoot, +{ + /// Create a new local context with a user + pub fn new_local(user: Space<User>) -> Self { + Self { + remote: None, + user: Some(user), + } + } + + /// Create a new remote context with a server + pub fn new_remote(server: Space<Server>) -> Self { + Self { + remote: Some(server), + user: None, + } + } +} + +impl<User, Server> ProtocolContext<User, Server> +where + User: SpaceRoot, + Server: SpaceRoot, +{ + /// Check if the context is remote (has a server) + pub fn is_remote(&self) -> bool { + self.remote.is_some() + } + + /// Check if the context is local (has a user) + pub fn is_local(&self) -> bool { + self.user.is_some() + } + + /// Get the remote vault if it exists + pub fn remote(&self) -> Option<&Space<Server>> { + self.remote.as_ref() + } + + /// Get the local workspace if it exists + pub fn local(&self) -> Option<&Space<User>> { + self.user.as_ref() + } + + /// Unwrap the local workspace, panics if not local + pub fn unwrap_local(&self) -> &Space<User> { + self.user.as_ref().expect("Not a local context") + } + + /// Unwrap the remote vault, panics if not remote + pub fn unwrap_remote(&self) -> &Space<Server> { + self.remote.as_ref().expect("Not a remote context") + } +} |
