pub struct MountainVinegRPCService {
ApplicationHandle: AppHandle,
RunTime: Arc<ApplicationRunTime>,
ActiveOperations: Arc<RwLock<HashMap<u64, CancellationToken>>>,
}Expand description
The concrete implementation of the MountainService gRPC service.
This service handles all incoming RPC calls from the Cocoon sidecar, validating requests, dispatching to appropriate handlers, and returning responses in the expected gRPC format.
Fields§
§ApplicationHandle: AppHandleTauri application handle for VS Code integration
RunTime: Arc<ApplicationRunTime>Application runtime containing core dependencies
ActiveOperations: Arc<RwLock<HashMap<u64, CancellationToken>>>Registry of active operations with their cancellation tokens Maps request ID to cancellation token for operation cancellation
Implementations§
Source§impl MountainVinegRPCService
impl MountainVinegRPCService
Sourcepub fn ApplicationHandle(&self) -> &AppHandle
pub fn ApplicationHandle(&self) -> &AppHandle
Accessor for Tauri AppHandle - used by the per-wire-method atoms
in Vine::Server::Notification::* that need to emit
sky:// / cocoon:* events downstream. Kept as a thin read so the
struct’s fields can stay private; atoms should never mutate the
handle, only emit through it.
Sourcepub fn RunTime(&self) -> &Arc<ApplicationRunTime>
pub fn RunTime(&self) -> &Arc<ApplicationRunTime>
Accessor for the shared ApplicationRunTime. Notification atoms
reach Environment.ApplicationState.* (provider registry, extension
registry, scheduler) through this. Clone from Arc when the atom
needs to keep it across an .await boundary.
Source§impl MountainVinegRPCService
impl MountainVinegRPCService
Sourcepub fn Create(
ApplicationHandle: AppHandle,
RunTime: Arc<ApplicationRunTime>,
) -> Self
pub fn Create( ApplicationHandle: AppHandle, RunTime: Arc<ApplicationRunTime>, ) -> Self
Sourcepub async fn RegisterOperation(&self, request_id: u64) -> CancellationToken
pub async fn RegisterOperation(&self, request_id: u64) -> CancellationToken
Sourcepub async fn UnregisterOperation(&self, request_id: u64)
pub async fn UnregisterOperation(&self, request_id: u64)
Unregisters an operation after completion
§Parameters
request_id: The request identifier to unregister
Sourcefn ValidateRequest(&self, request: &GenericRequest) -> Result<(), Status>
fn ValidateRequest(&self, request: &GenericRequest) -> Result<(), Status>
Sourcefn CreateErrorResponse(
RequestIdentifier: u64,
code: i32,
message: String,
data: Option<Vec<u8>>,
) -> GenericResponse
fn CreateErrorResponse( RequestIdentifier: u64, code: i32, message: String, data: Option<Vec<u8>>, ) -> GenericResponse
Sourcefn CreateSuccessResponse(
RequestIdentifier: u64,
result: &Value,
) -> GenericResponse
fn CreateSuccessResponse( RequestIdentifier: u64, result: &Value, ) -> GenericResponse
Trait Implementations§
Source§impl MountainService for MountainVinegRPCService
impl MountainService for MountainVinegRPCService
Source§fn process_cocoon_request<'life0, 'async_trait>(
&'life0 self,
request: Request<GenericRequest>,
) -> Pin<Box<dyn Future<Output = Result<Response<GenericResponse>, Status>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
fn process_cocoon_request<'life0, 'async_trait>(
&'life0 self,
request: Request<GenericRequest>,
) -> Pin<Box<dyn Future<Output = Result<Response<GenericResponse>, Status>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
Handles generic request-response RPCs from Cocoon.
This is the main entry point for Cocoon to request operations from Mountain. It validates the request, deserializes parameters, dispatches to the Track module, and returns the result or error in JSON-RPC format.
§Parameters
request: GenericRequest containing method name and serialized parameters
§Returns
Ok(Response<GenericResponse>): Response with result or errorErr(Status): gRPC status error (only for critical failures)
Source§fn send_cocoon_notification<'life0, 'async_trait>(
&'life0 self,
request: Request<GenericNotification>,
) -> Pin<Box<dyn Future<Output = Result<Response<Empty>, Status>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
fn send_cocoon_notification<'life0, 'async_trait>(
&'life0 self,
request: Request<GenericNotification>,
) -> Pin<Box<dyn Future<Output = Result<Response<Empty>, Status>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
Handles generic fire-and-forget notifications from Cocoon.
Notifications do not expect a response beyond acknowledgment. They are used for status updates, events, and other asynchronous notifications.
§Parameters
request: GenericNotification with method name and parameters
§Returns
Ok(Response<Empty>): Notification was received and loggedErr(Status): Critical error during processing
§TODO
Future implementation should route notifications to dedicated handlers:
let Parameter: Value = serde_json::from_slice(¬ification.parameter)?;
NotificationHandler::Handle(MethodName, Parameter).await?;Source§fn cancel_operation<'life0, 'async_trait>(
&'life0 self,
request: Request<CancelOperationRequest>,
) -> Pin<Box<dyn Future<Output = Result<Response<Empty>, Status>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
fn cancel_operation<'life0, 'async_trait>(
&'life0 self,
request: Request<CancelOperationRequest>,
) -> Pin<Box<dyn Future<Output = Result<Response<Empty>, Status>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
Handles a request from Cocoon to cancel a long-running operation.
This method is called when Cocoon wants to cancel an operation that was previously initiated via process_cocoon_request.
§Parameters
request: CancelOperationRequest with the request ID to cancel
§Returns
Ok(Response<Empty>): Cancellation was initiatedErr(Status): Critical error during cancellation
Source§type OpenChannelFromCocoonStream = Pin<Box<dyn Stream<Item = Result<Envelope, Status>> + Send>>
type OpenChannelFromCocoonStream = Pin<Box<dyn Stream<Item = Result<Envelope, Status>> + Send>>
Source§fn open_channel_from_cocoon<'life0, 'async_trait>(
&'life0 self,
_request: Request<Streaming<Envelope>>,
) -> Pin<Box<dyn Future<Output = Result<Response<Self::OpenChannelFromCocoonStream>, Status>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
fn open_channel_from_cocoon<'life0, 'async_trait>(
&'life0 self,
_request: Request<Streaming<Envelope>>,
) -> Pin<Box<dyn Future<Output = Result<Response<Self::OpenChannelFromCocoonStream>, Status>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
Auto Trait Implementations§
impl Freeze for MountainVinegRPCService
impl !RefUnwindSafe for MountainVinegRPCService
impl Send for MountainVinegRPCService
impl Sync for MountainVinegRPCService
impl Unpin for MountainVinegRPCService
impl UnsafeUnpin for MountainVinegRPCService
impl !UnwindSafe for MountainVinegRPCService
Blanket Implementations§
§impl<'a, T, E> AsTaggedExplicit<'a, E> for Twhere
T: 'a,
impl<'a, T, E> AsTaggedExplicit<'a, E> for Twhere
T: 'a,
§impl<'a, T, E> AsTaggedImplicit<'a, E> for Twhere
T: 'a,
impl<'a, T, E> AsTaggedImplicit<'a, E> for Twhere
T: 'a,
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
§impl<T> Downcast for Twhere
T: Any,
impl<T> Downcast for Twhere
T: Any,
§fn into_any(self: Box<T>) -> Box<dyn Any>
fn into_any(self: Box<T>) -> Box<dyn Any>
Box<dyn Trait> (where Trait: Downcast) to Box<dyn Any>. Box<dyn Any> can
then be further downcast into Box<ConcreteType> where ConcreteType implements Trait.§fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>
fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>
Rc<Trait> (where Trait: Downcast) to Rc<Any>. Rc<Any> can then be
further downcast into Rc<ConcreteType> where ConcreteType implements Trait.§fn as_any(&self) -> &(dyn Any + 'static)
fn as_any(&self) -> &(dyn Any + 'static)
&Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot
generate &Any’s vtable from &Trait’s.§fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
&mut Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot
generate &mut Any’s vtable from &mut Trait’s.§impl<T> DowncastSync for T
impl<T> DowncastSync for T
§impl<T> FutureExt for T
impl<T> FutureExt for T
§fn with_context(self, otel_cx: Context) -> WithContext<Self>
fn with_context(self, otel_cx: Context) -> WithContext<Self>
§fn with_current_context(self) -> WithContext<Self>
fn with_current_context(self) -> WithContext<Self>
§impl<T> Instrument for T
impl<T> Instrument for T
§fn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
§fn in_current_span(self) -> Instrumented<Self>
fn in_current_span(self) -> Instrumented<Self>
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self>
fn into_either(self, into_left: bool) -> Either<Self, Self>
self into a Left variant of Either<Self, Self>
if into_left is true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
self into a Left variant of Either<Self, Self>
if into_left(&self) returns true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read more§impl<T> IntoRequest<T> for T
impl<T> IntoRequest<T> for T
§fn into_request(self) -> Request<T>
fn into_request(self) -> Request<T>
T in a tonic::Request§impl<L> LayerExt<L> for L
impl<L> LayerExt<L> for L
§fn named_layer<S>(&self, service: S) -> Layered<<L as Layer<S>>::Service, S>where
L: Layer<S>,
fn named_layer<S>(&self, service: S) -> Layered<<L as Layer<S>>::Service, S>where
L: Layer<S>,
Layered].