Skip to content

Commit c9c7330

Browse files
refactor(Mountain): Simplify capability system and activate Vine gRPC
- Updated Tauri path API usage (`path_resolver()` → `path()`) in configuration handling to align with latest Tauri best practices - Refactored `Requires` trait implementations in `MountainEnvironment` to use dynamic trait objects directly instead of `Arc<dyn Trait>` in bounds, simplifying capability resolution - Adjusted `ApplicationRunTime` to work with new capability bounds, maintaining ActionEffect execution semantics - Activated Vine gRPC layer by uncommenting `tonic::include_proto!` and adding re-exports in `Generated.rs` - Rewrote Vine client with thread-safe connection pooling and proper error handling: • Uses UUIDs for request tracking • Implements timeout management • Adds granular error variants - Updated Vine server to use generated gRPC stubs and dispatch requests through `Track` system - Removed redundant logging imports and adjusted log levels for cleaner output This completes the core gRPC activation required for Mountain↔Cocoon communication and simplifies the capability system in alignment with Land's final architecture.
1 parent dd6cfb0 commit c9c7330

15 files changed

Lines changed: 123 additions & 114 deletions
File renamed without changes.
File renamed without changes.

Source/ApplicationState/Internal.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@
88

99
use std::{collections::HashMap, fs, path::Path};
1010

11-
use log::{error, warn};
11+
use log::error;
1212
use serde::{self, Deserializer, Serializer};
1313
use serde_json::Value;
1414
use url::Url;

Source/Environment/ConfigurationProvider.rs

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -17,12 +17,14 @@ use Common::{
1717
InspectResultDataDTO::InspectResultDataDTO,
1818
},
1919
},
20+
Environment::Requires::Requires,
2021
Error::CommonError::CommonError,
2122
FileSystem::{FileSystemReader::FileSystemReader, FileSystemWriter::FileSystemWriter},
2223
};
2324
use async_trait::async_trait;
2425
use log::{debug, info, warn};
2526
use serde_json::{Map, Value};
27+
use tauri::Manager;
2628

2729
use super::MountainEnvironment::MountainEnvironment;
2830
// TODO: Re-integrate IPC client for notifications
@@ -59,10 +61,7 @@ impl ConfigurationProvider for MountainEnvironment {
5961

6062
let ConfigPath = match Target {
6163
ConfigurationTarget::User => {
62-
self.ApplicationHandle
63-
.path_resolver()
64-
.app_config_dir()
65-
.map(|p| p.join("settings.json"))
64+
self.ApplicationHandle.path().app_config_dir().map(|p| p.join("settings.json"))
6665
},
6766
ConfigurationTarget::WorkSpace => {
6867
self.ApplicationState
@@ -150,7 +149,7 @@ pub async fn InitializeAndMergeConfigurations(Environment:&MountainEnvironment)
150149

151150
let UserSettingsPath = Environment
152151
.ApplicationHandle
153-
.path_resolver()
152+
.path()
154153
.app_config_dir()
155154
.map(|p| p.join("settings.json"));
156155

Source/Environment/DocumentProvider.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ use std::sync::Arc;
99

1010
use Common::{
1111
Document::DocumentProvider::DocumentProvider,
12+
Environment::Requires::Requires,
1213
Error::CommonError::CommonError,
1314
FileSystem::{FileSystemReader::FileSystemReader, FileSystemWriter::FileSystemWriter},
1415
IPC::IPCProvider::IPCProvider,

Source/Environment/LanguageFeatureProvider.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88
use std::sync::Arc;
99

1010
use Common::{
11+
Environment::Requires::Requires,
1112
Error::CommonError::CommonError,
1213
IPC::IPCProvider::IPCProvider,
1314
LanguageFeature::{

Source/Environment/MountainEnvironment.rs

Lines changed: 23 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -57,72 +57,72 @@ impl Environment for MountainEnvironment {}
5757
// implements every provider trait, so when an effect requires a capability, we
5858
// provide a clone of the environment, which satisfies the trait bound.
5959

60-
impl Requires<Arc<dyn CommandExecutor>> for MountainEnvironment {
60+
impl Requires<dyn CommandExecutor> for MountainEnvironment {
6161
fn Require(&self) -> Arc<dyn CommandExecutor> { Arc::new(self.clone()) }
6262
}
63-
impl Requires<Arc<dyn ConfigurationProvider>> for MountainEnvironment {
63+
impl Requires<dyn ConfigurationProvider> for MountainEnvironment {
6464
fn Require(&self) -> Arc<dyn ConfigurationProvider> { Arc::new(self.clone()) }
6565
}
66-
impl Requires<Arc<dyn ConfigurationInspector>> for MountainEnvironment {
66+
impl Requires<dyn ConfigurationInspector> for MountainEnvironment {
6767
fn Require(&self) -> Arc<dyn ConfigurationInspector> { Arc::new(self.clone()) }
6868
}
69-
impl Requires<Arc<dyn CustomEditorProvider>> for MountainEnvironment {
69+
impl Requires<dyn CustomEditorProvider> for MountainEnvironment {
7070
fn Require(&self) -> Arc<dyn CustomEditorProvider> { Arc::new(self.clone()) }
7171
}
72-
impl Requires<Arc<dyn DiagnosticManager>> for MountainEnvironment {
72+
impl Requires<dyn DiagnosticManager> for MountainEnvironment {
7373
fn Require(&self) -> Arc<dyn DiagnosticManager> { Arc::new(self.clone()) }
7474
}
75-
impl Requires<Arc<dyn DocumentProvider>> for MountainEnvironment {
75+
impl Requires<dyn DocumentProvider> for MountainEnvironment {
7676
fn Require(&self) -> Arc<dyn DocumentProvider> { Arc::new(self.clone()) }
7777
}
78-
impl Requires<Arc<dyn FileSystemReader>> for MountainEnvironment {
78+
impl Requires<dyn FileSystemReader> for MountainEnvironment {
7979
fn Require(&self) -> Arc<dyn FileSystemReader> { Arc::new(self.clone()) }
8080
}
81-
impl Requires<Arc<dyn FileSystemWriter>> for MountainEnvironment {
81+
impl Requires<dyn FileSystemWriter> for MountainEnvironment {
8282
fn Require(&self) -> Arc<dyn FileSystemWriter> { Arc::new(self.clone()) }
8383
}
84-
impl Requires<Arc<dyn IPCProvider>> for MountainEnvironment {
84+
impl Requires<dyn IPCProvider> for MountainEnvironment {
8585
fn Require(&self) -> Arc<dyn IPCProvider> { Arc::new(self.clone()) }
8686
}
87-
impl Requires<Arc<dyn LanguageFeatureProviderRegistry>> for MountainEnvironment {
87+
impl Requires<dyn LanguageFeatureProviderRegistry> for MountainEnvironment {
8888
fn Require(&self) -> Arc<dyn LanguageFeatureProviderRegistry> { Arc::new(self.clone()) }
8989
}
90-
impl Requires<Arc<dyn OutputChannelManager>> for MountainEnvironment {
90+
impl Requires<dyn OutputChannelManager> for MountainEnvironment {
9191
fn Require(&self) -> Arc<dyn OutputChannelManager> { Arc::new(self.clone()) }
9292
}
93-
impl Requires<Arc<dyn SourceControlManagementProvider>> for MountainEnvironment {
93+
impl Requires<dyn SourceControlManagementProvider> for MountainEnvironment {
9494
fn Require(&self) -> Arc<dyn SourceControlManagementProvider> { Arc::new(self.clone()) }
9595
}
96-
impl Requires<Arc<dyn SecretProvider>> for MountainEnvironment {
96+
impl Requires<dyn SecretProvider> for MountainEnvironment {
9797
fn Require(&self) -> Arc<dyn SecretProvider> { Arc::new(self.clone()) }
9898
}
99-
impl Requires<Arc<dyn StatusBarProvider>> for MountainEnvironment {
99+
impl Requires<dyn StatusBarProvider> for MountainEnvironment {
100100
fn Require(&self) -> Arc<dyn StatusBarProvider> { Arc::new(self.clone()) }
101101
}
102-
impl Requires<Arc<dyn StorageProvider>> for MountainEnvironment {
102+
impl Requires<dyn StorageProvider> for MountainEnvironment {
103103
fn Require(&self) -> Arc<dyn StorageProvider> { Arc::new(self.clone()) }
104104
}
105-
impl Requires<Arc<dyn SynchronizationProvider>> for MountainEnvironment {
105+
impl Requires<dyn SynchronizationProvider> for MountainEnvironment {
106106
fn Require(&self) -> Arc<dyn SynchronizationProvider> { Arc::new(self.clone()) }
107107
}
108-
impl Requires<Arc<dyn TerminalProvider>> for MountainEnvironment {
108+
impl Requires<dyn TerminalProvider> for MountainEnvironment {
109109
fn Require(&self) -> Arc<dyn TerminalProvider> { Arc::new(self.clone()) }
110110
}
111-
impl Requires<Arc<dyn TestController>> for MountainEnvironment {
111+
impl Requires<dyn TestController> for MountainEnvironment {
112112
fn Require(&self) -> Arc<dyn TestController> { Arc::new(self.clone()) }
113113
}
114-
impl Requires<Arc<dyn TreeViewProvider>> for MountainEnvironment {
114+
impl Requires<dyn TreeViewProvider> for MountainEnvironment {
115115
fn Require(&self) -> Arc<dyn TreeViewProvider> { Arc::new(self.clone()) }
116116
}
117-
impl Requires<Arc<dyn UserInterfaceProvider>> for MountainEnvironment {
117+
impl Requires<dyn UserInterfaceProvider> for MountainEnvironment {
118118
fn Require(&self) -> Arc<dyn UserInterfaceProvider> { Arc::new(self.clone()) }
119119
}
120-
impl Requires<Arc<dyn WebViewProvider>> for MountainEnvironment {
120+
impl Requires<dyn WebViewProvider> for MountainEnvironment {
121121
fn Require(&self) -> Arc<dyn WebViewProvider> { Arc::new(self.clone()) }
122122
}
123-
impl Requires<Arc<dyn WorkSpaceProvider>> for MountainEnvironment {
123+
impl Requires<dyn WorkSpaceProvider> for MountainEnvironment {
124124
fn Require(&self) -> Arc<dyn WorkSpaceProvider> { Arc::new(self.clone()) }
125125
}
126-
impl Requires<Arc<dyn WorkSpaceEditApplier>> for MountainEnvironment {
126+
impl Requires<dyn WorkSpaceEditApplier> for MountainEnvironment {
127127
fn Require(&self) -> Arc<dyn WorkSpaceEditApplier> { Arc::new(self.clone()) }
128128
}

Source/Environment/StatusBarProvider.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88
use std::sync::Arc;
99

1010
use Common::{
11+
Environment::Requires::Requires,
1112
Error::CommonError::CommonError,
1213
IPC::IPCProvider::IPCProvider,
1314
StatusBar::{DTO::StatusBarEntryDTO::StatusBarEntryDTO, StatusBarProvider::StatusBarProvider},

Source/Environment/TerminalProvider.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
use std::{env, io::Write, sync::Arc};
88

99
use Common::{
10+
Environment::Requires::Requires,
1011
Error::CommonError::CommonError,
1112
IPC::IPCProvider::IPCProvider,
1213
Terminal::TerminalProvider::TerminalProvider,

Source/RunTime/ApplicationRunTime.rs

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -59,20 +59,20 @@ impl ApplicationRunTimeTrait for ApplicationRunTime {
5959
/// future, submits that future to the scheduler, and then awaits the result
6060
/// via a `oneshot` channel. This decouples the *request* of an effect from
6161
/// its *execution* on a worker thread, enabling true concurrent processing.
62-
async fn Run<TCapability, TError, TOutput>(
62+
async fn Run<TCapabilityProvider, TError, TOutput>(
6363
&self,
64-
Effect:ActionEffect<Arc<TCapability>, TError, TOutput>,
64+
Effect:ActionEffect<Arc<TCapabilityProvider>, TError, TOutput>,
6565
) -> Result<TOutput, TError>
6666
where
67-
TCapability: ?Sized + Send + Sync,
68-
Self::EnvironmentType: Requires<Arc<TCapability>>,
67+
TCapabilityProvider: ?Sized + Send + Sync + 'static,
68+
Self::EnvironmentType: Requires<TCapabilityProvider>,
6969
TError: From<CommonError> + Send + Sync + 'static,
7070
TOutput: Send + Sync + 'static, {
7171
// 1. Create the single-use channel to receive the result from the worker.
7272
let (ResultSender, ResultReceiver) = oneshot::channel::<Result<TOutput, TError>>();
7373

7474
// 2. Get the specific capability the effect needs from the Environment.
75-
let CapabilityProvider:Arc<TCapability> = self.Environment.Require();
75+
let CapabilityProvider:Arc<TCapabilityProvider> = self.Environment.Require();
7676

7777
// 3. Create the future that will be executed by a worker thread.
7878
// This future captures the Effect, its Capability, and the Sender.

0 commit comments

Comments
 (0)