1use std::{collections::HashMap, sync::Arc};
32
33use async_trait::async_trait;
34use log::{debug, error, info, warn};
35use tokio::sync::RwLock;
36use tonic::{Request, Response, Status};
37
38use crate::Environment::MountainEnvironment::MountainEnvironment;
39use crate::Vine::Generated::{
41 ApplyEditRequest,
42 ApplyEditResponse,
43 Argument,
44 CancelOperationRequest,
45
46 CloseTerminalRequest,
47 CodeAction,
48
49 CompletionItem,
50 CreateStatusBarItemRequest,
51 CreateStatusBarItemResponse,
52 CreateWebviewPanelRequest,
53 CreateWebviewPanelResponse,
54 DebugConfiguration,
55 DeleteSecretRequest,
56 Empty,
58 ExecuteCommandRequest,
59 ExecuteCommandResponse,
60 FindFilesRequest,
62 FindFilesResponse,
63 FindTextInFilesRequest,
64 FindTextInFilesResponse,
65 GenericNotification,
66 GenericRequest,
68 GenericResponse,
69 GetSecretRequest,
71 GetSecretResponse,
72 GetTreeChildrenRequest,
73 GetTreeChildrenResponse,
74 GitExecRequest,
75 GitExecResponse,
76
77 InitExtensionHostRequest,
79
80 Location,
81 OnDidReceiveMessageRequest,
82
83 OpenDocumentRequest,
84 OpenDocumentResponse,
85 OpenTerminalRequest,
87 ParticipateInSaveRequest,
89 ParticipateInSaveResponse,
90 Position,
91 ProvideCodeActionsRequest,
92 ProvideCodeActionsResponse,
93 ProvideCompletionItemsRequest,
94 ProvideCompletionItemsResponse,
95 ProvideDefinitionRequest,
96 ProvideDefinitionResponse,
97 ProvideHoverRequest,
98 ProvideHoverResponse,
99 ProvideReferencesRequest,
100 ProvideReferencesResponse,
101 Range,
102 ReadFileRequest,
104 ReadFileResponse,
105 ReaddirRequest,
106 ReaddirResponse,
107 RegisterCommandRequest,
109 RegisterDebugAdapterRequest,
111 RegisterProviderRequest,
113 RegisterScmProviderRequest,
115 RegisterTreeViewProviderRequest,
117 SaveAllRequest,
118 SaveAllResponse,
119 SetStatusBarTextRequest,
120 SetWebviewHtmlRequest,
121 ShowMessageRequest,
122 ShowMessageResponse,
123 ShowTextDocumentRequest,
125 ShowTextDocumentResponse,
126 SourceControlResourceState,
127 StartDebuggingRequest,
128 StartDebuggingResponse,
129
130 StatRequest,
131 StatResponse,
132 StoreSecretRequest,
133 TerminalClosedNotification,
134 TerminalDataNotification,
135
136 TerminalInputRequest,
137 TerminalOpenedNotification,
138 TerminalProcessIdNotification,
139 TextDocumentSaveReason,
140 TextEdit,
141 TextEditForSave,
142
143 TextMatch,
144 TreeItem,
145
146 UnregisterCommandRequest,
147
148 UpdateConfigurationRequest,
149 UpdateScmGroupRequest,
150 UpdateWorkspaceFoldersRequest,
151
152 Uri,
153 ViewColumn,
154
155 WatchFileRequest,
156
157 WorkspaceFolder,
158 WriteFileRequest,
159 cocoon_service_server::CocoonService,
161};
162
163#[derive(Clone)]
168pub struct CocoonServiceImpl {
169 environment:Arc<MountainEnvironment>,
171
172 ActiveOperations:Arc<RwLock<HashMap<u64, tokio_util::sync::CancellationToken>>>,
175}
176
177impl CocoonServiceImpl {
178 pub fn new(environment:Arc<MountainEnvironment>) -> Self {
186 info!("[CocoonService] New instance created");
187
188 Self { environment, ActiveOperations:Arc::new(RwLock::new(HashMap::new())) }
189 }
190
191 pub async fn RegisterOperation(&self, request_id:u64) -> tokio_util::sync::CancellationToken {
199 let token = tokio_util::sync::CancellationToken::new();
200 self.ActiveOperations.write().await.insert(request_id, token.clone());
201 debug!("[CocoonService] Registered operation {} for cancellation", request_id);
202 token
203 }
204
205 pub async fn UnregisterOperation(&self, request_id:u64) {
210 self.ActiveOperations.write().await.remove(&request_id);
211 debug!("[CocoonService] Unregistered operation {}", request_id);
212 }
213}
214
215#[async_trait]
216impl CocoonService for CocoonServiceImpl {
217 async fn process_mountain_request(
219 &self,
220 request:Request<GenericRequest>,
221 ) -> Result<Response<GenericResponse>, Status> {
222 let request_data = request.into_inner();
223 info!(
224 "[CocoonService] Processing generic Mountain request '{}' with ID {}",
225 request_data.method, request_data.request_identifier
226 );
227
228 Ok(Response::new(GenericResponse {
233 request_identifier:request_data.request_identifier,
234 result:Vec::new(),
235 error:None,
236 }))
237 }
238
239 async fn send_mountain_notification(
241 &self,
242 request:Request<GenericNotification>,
243 ) -> Result<Response<Empty>, Status> {
244 let notification = request.into_inner();
245 debug!(
246 "[CocoonService] Sending generic Mountain notification '{}'",
247 notification.method
248 );
249
250 Ok(Response::new(Empty {}))
255 }
256
257 async fn cancel_operation(&self, request:Request<CancelOperationRequest>) -> Result<Response<Empty>, Status> {
259 let cancel_request = request.into_inner();
260 info!(
261 "[CocoonService] Cancel operation request: {}",
262 cancel_request.request_identifier_to_cancel
263 );
264
265 Ok(Response::new(Empty {}))
271 }
272
273 async fn initial_handshake(&self, _request:Request<Empty>) -> Result<Response<Empty>, Status> {
277 info!("[CocoonService] Initial handshake received from Cocoon");
278 Ok(Response::new(Empty {}))
279 }
280
281 async fn init_extension_host(&self, request:Request<InitExtensionHostRequest>) -> Result<Response<Empty>, Status> {
283 let req = request.into_inner();
284 info!(
285 "[CocoonService] Initializing extension host with {} workspace folders",
286 req.workspace_folders.len()
287 );
288
289 Ok(Response::new(Empty {}))
295 }
296
297 async fn register_command(&self, request:Request<RegisterCommandRequest>) -> Result<Response<Empty>, Status> {
301 let req = request.into_inner();
302 info!(
303 "[CocoonService] Registering command '{}' from extension '{}'",
304 req.command_id, req.extension_id
305 );
306
307 Ok(Response::new(Empty {}))
312 }
313
314 async fn execute_contributed_command(
316 &self,
317 request:Request<ExecuteCommandRequest>,
318 ) -> Result<Response<ExecuteCommandResponse>, Status> {
319 let req = request.into_inner();
320 info!(
321 "[CocoonService] Executing command '{}' with {} arguments",
322 req.command_id,
323 req.arguments.len()
324 );
325
326 Ok(Response::new(ExecuteCommandResponse {
333 result:Some(crate::Vine::Generated::execute_command_response::Result::Value(
334 b"placeholder".to_vec(),
335 )),
336 }))
337 }
338
339 async fn unregister_command(&self, request:Request<UnregisterCommandRequest>) -> Result<Response<Empty>, Status> {
341 let req = request.into_inner();
342 info!("[CocoonService] Unregistering command '{}'", req.command_id);
343
344 Ok(Response::new(Empty {}))
347 }
348
349 async fn register_hover_provider(
353 &self,
354 request:Request<RegisterProviderRequest>,
355 ) -> Result<Response<Empty>, Status> {
356 let req = request.into_inner();
357 info!(
358 "[CocoonService] Registering hover provider for '{}' with handle {}",
359 req.language_selector, req.handle
360 );
361
362 Ok(Response::new(Empty {}))
365 }
366
367 async fn provide_hover(
369 &self,
370 request:Request<ProvideHoverRequest>,
371 ) -> Result<Response<ProvideHoverResponse>, Status> {
372 let req = request.into_inner();
373 debug!("[CocoonService] Providing hover for provider {}", req.provider_handle);
374
375 Ok(Response::new(ProvideHoverResponse {
381 markdown:String::new(),
382 range:Some(Range {
383 start:Some(Position { line:0, character:0 }),
384 end:Some(Position { line:0, character:0 }),
385 }),
386 }))
387 }
388
389 async fn register_completion_item_provider(
391 &self,
392 request:Request<RegisterProviderRequest>,
393 ) -> Result<Response<Empty>, Status> {
394 let req = request.into_inner();
395 info!(
396 "[CocoonService] Registering completion provider for '{}' with handle {}",
397 req.language_selector, req.handle
398 );
399
400 Ok(Response::new(Empty {}))
403 }
404
405 async fn provide_completion_items(
407 &self,
408 request:Request<ProvideCompletionItemsRequest>,
409 ) -> Result<Response<ProvideCompletionItemsResponse>, Status> {
410 let req = request.into_inner();
411 debug!("[CocoonService] Providing completions for provider {}", req.provider_handle);
412
413 Ok(Response::new(ProvideCompletionItemsResponse { items:Vec::new() }))
416 }
417
418 async fn register_definition_provider(
420 &self,
421 request:Request<RegisterProviderRequest>,
422 ) -> Result<Response<Empty>, Status> {
423 let req = request.into_inner();
424 info!(
425 "[CocoonService] Registering definition provider for '{}' with handle {}",
426 req.language_selector, req.handle
427 );
428
429 Ok(Response::new(Empty {}))
432 }
433
434 async fn provide_definition(
436 &self,
437 request:Request<ProvideDefinitionRequest>,
438 ) -> Result<Response<ProvideDefinitionResponse>, Status> {
439 let req = request.into_inner();
440 debug!("[CocoonService] Providing definition for provider {}", req.provider_handle);
441
442 Ok(Response::new(ProvideDefinitionResponse { locations:Vec::new() }))
445 }
446
447 async fn register_reference_provider(
449 &self,
450 request:Request<RegisterProviderRequest>,
451 ) -> Result<Response<Empty>, Status> {
452 let req = request.into_inner();
453 info!(
454 "[CocoonService] Registering reference provider for '{}' with handle {}",
455 req.language_selector, req.handle
456 );
457
458 Ok(Response::new(Empty {}))
461 }
462
463 async fn provide_references(
465 &self,
466 request:Request<ProvideReferencesRequest>,
467 ) -> Result<Response<ProvideReferencesResponse>, Status> {
468 let req = request.into_inner();
469 debug!("[CocoonService] Providing references for provider {}", req.provider_handle);
470
471 Ok(Response::new(ProvideReferencesResponse { locations:Vec::new() }))
474 }
475
476 async fn register_code_actions_provider(
478 &self,
479 request:Request<RegisterProviderRequest>,
480 ) -> Result<Response<Empty>, Status> {
481 let req = request.into_inner();
482 info!(
483 "[CocoonService] Registering code actions provider for '{}' with handle {}",
484 req.language_selector, req.handle
485 );
486
487 Ok(Response::new(Empty {}))
490 }
491
492 async fn provide_code_actions(
494 &self,
495 request:Request<ProvideCodeActionsRequest>,
496 ) -> Result<Response<ProvideCodeActionsResponse>, Status> {
497 let req = request.into_inner();
498 debug!("[CocoonService] Providing code actions for provider {}", req.provider_handle);
499
500 Ok(Response::new(ProvideCodeActionsResponse { actions:Vec::new() }))
503 }
504
505 async fn show_text_document(
509 &self,
510 request:Request<ShowTextDocumentRequest>,
511 ) -> Result<Response<ShowTextDocumentResponse>, Status> {
512 let req = request.into_inner();
513 info!(
514 "[CocoonService] Showing text document: {}",
515 req.uri.as_ref().map(|u| &u.value).unwrap_or(&String::new())
516 );
517
518 Ok(Response::new(ShowTextDocumentResponse { success:true }))
521 }
522
523 async fn show_information_message(
525 &self,
526 request:Request<ShowMessageRequest>,
527 ) -> Result<Response<ShowMessageResponse>, Status> {
528 let req = request.into_inner();
529 debug!("[CocoonService] Showing information message");
530
531 warn!("{}", req.message);
533
534 Ok(Response::new(ShowMessageResponse { success:true }))
535 }
536
537 async fn show_warning_message(
539 &self,
540 request:Request<ShowMessageRequest>,
541 ) -> Result<Response<ShowMessageResponse>, Status> {
542 let req = request.into_inner();
543 debug!("[CocoonService] Showing warning message");
544
545 warn!("{}", req.message);
547
548 Ok(Response::new(ShowMessageResponse { success:true }))
549 }
550
551 async fn show_error_message(
553 &self,
554 request:Request<ShowMessageRequest>,
555 ) -> Result<Response<ShowMessageResponse>, Status> {
556 let req = request.into_inner();
557 debug!("[CocoonService] Showing error message");
558
559 error!("{}", req.message);
561
562 Ok(Response::new(ShowMessageResponse { success:true }))
563 }
564
565 async fn create_status_bar_item(
567 &self,
568 request:Request<CreateStatusBarItemRequest>,
569 ) -> Result<Response<CreateStatusBarItemResponse>, Status> {
570 let req = request.into_inner();
571 info!("[CocoonService] Creating status bar item: {}", req.id);
572
573 Ok(Response::new(CreateStatusBarItemResponse { item_id:req.id.clone() }))
576 }
577
578 async fn set_status_bar_text(&self, request:Request<SetStatusBarTextRequest>) -> Result<Response<Empty>, Status> {
580 let req = request.into_inner();
581 debug!("[CocoonService] Setting status bar text for item {}", req.item_id);
582
583 Ok(Response::new(Empty {}))
586 }
587
588 async fn create_webview_panel(
590 &self,
591 request:Request<CreateWebviewPanelRequest>,
592 ) -> Result<Response<CreateWebviewPanelResponse>, Status> {
593 let req = request.into_inner();
594 info!("[CocoonService] Creating webview panel: {}", req.view_type);
595
596 Ok(Response::new(CreateWebviewPanelResponse { handle:0 }))
602 }
603
604 async fn set_webview_html(&self, request:Request<SetWebviewHtmlRequest>) -> Result<Response<Empty>, Status> {
606 let req = request.into_inner();
607 debug!("[CocoonService] Setting webview HTML for handle {}", req.handle);
608
609 Ok(Response::new(Empty {}))
612 }
613
614 async fn on_did_receive_message(
616 &self,
617 request:Request<OnDidReceiveMessageRequest>,
618 ) -> Result<Response<Empty>, Status> {
619 let req = request.into_inner();
620 debug!("[CocoonService] Received webview message for handle {}", req.handle);
621
622 Ok(Response::new(Empty {}))
625 }
626
627 async fn read_file(&self, request:Request<ReadFileRequest>) -> Result<Response<ReadFileResponse>, Status> {
631 let req = request.into_inner();
632 debug!(
633 "[CocoonService] Reading file: {}",
634 req.uri.as_ref().map(|u| &u.value).unwrap_or(&String::new())
635 );
636
637 Err(Status::unimplemented("read_file not yet implemented"))
640 }
641
642 async fn write_file(&self, request:Request<WriteFileRequest>) -> Result<Response<Empty>, Status> {
644 let req = request.into_inner();
645 debug!(
646 "[CocoonService] Writing file: {}",
647 req.uri.as_ref().map(|u| &u.value).unwrap_or(&String::new())
648 );
649
650 Err(Status::unimplemented("write_file not yet implemented"))
653 }
654
655 async fn stat(&self, request:Request<StatRequest>) -> Result<Response<StatResponse>, Status> {
657 let req = request.into_inner();
658 debug!(
659 "[CocoonService] Getting file metadata: {}",
660 req.uri.as_ref().map(|u| &u.value).unwrap_or(&String::new())
661 );
662
663 Err(Status::unimplemented("stat not yet implemented"))
666 }
667
668 async fn readdir(&self, request:Request<ReaddirRequest>) -> Result<Response<ReaddirResponse>, Status> {
670 let req = request.into_inner();
671 debug!(
672 "[CocoonService] Reading directory: {}",
673 req.uri.as_ref().map(|u| &u.value).unwrap_or(&String::new())
674 );
675
676 Err(Status::unimplemented("readdir not yet implemented"))
679 }
680
681 async fn watch_file(&self, request:Request<WatchFileRequest>) -> Result<Response<Empty>, Status> {
683 let req = request.into_inner();
684 debug!(
685 "[CocoonService] Watching file: {}",
686 req.uri.as_ref().map(|u| &u.value).unwrap_or(&String::new())
687 );
688
689 Err(Status::unimplemented("watch_file not yet implemented"))
692 }
693
694 async fn find_files(&self, request:Request<FindFilesRequest>) -> Result<Response<FindFilesResponse>, Status> {
698 let req = request.into_inner();
699 debug!("[CocoonService] Finding files with pattern: {}", req.pattern);
700
701 Err(Status::unimplemented("find_files not yet implemented"))
704 }
705
706 async fn find_text_in_files(
708 &self,
709 request:Request<FindTextInFilesRequest>,
710 ) -> Result<Response<FindTextInFilesResponse>, Status> {
711 let req = request.into_inner();
712 debug!("[CocoonService] Finding text with pattern: {}", req.pattern);
713
714 Err(Status::unimplemented("find_text_in_files not yet implemented"))
717 }
718
719 async fn open_document(
721 &self,
722 request:Request<OpenDocumentRequest>,
723 ) -> Result<Response<OpenDocumentResponse>, Status> {
724 let req = request.into_inner();
725 info!(
726 "[CocoonService] Opening document: {}",
727 req.uri.as_ref().map(|u| &u.value).unwrap_or(&String::new())
728 );
729
730 Err(Status::unimplemented("open_document not yet implemented"))
733 }
734
735 async fn save_all(&self, request:Request<SaveAllRequest>) -> Result<Response<SaveAllResponse>, Status> {
737 let req = request.into_inner();
738 info!(
739 "[CocoonService] Saving all documents (includeUntitled: {})",
740 req.include_untitled
741 );
742
743 Err(Status::unimplemented("save_all not yet implemented"))
746 }
747
748 async fn apply_edit(&self, request:Request<ApplyEditRequest>) -> Result<Response<ApplyEditResponse>, Status> {
750 let req = request.into_inner();
751 debug!("[CocoonService] Applying {} edits to document", req.edits.len());
752
753 Err(Status::unimplemented("apply_edit not yet implemented"))
756 }
757
758 async fn update_configuration(
760 &self,
761 request:Request<UpdateConfigurationRequest>,
762 ) -> Result<Response<Empty>, Status> {
763 let req = request.into_inner();
764 debug!(
765 "[CocoonService] Updating configuration with {} changed keys",
766 req.changed_keys.len()
767 );
768
769 Ok(Response::new(Empty {}))
772 }
773
774 async fn update_workspace_folders(
776 &self,
777 request:Request<UpdateWorkspaceFoldersRequest>,
778 ) -> Result<Response<Empty>, Status> {
779 let req = request.into_inner();
780 info!(
781 "[CocoonService] Updating workspace: {} additions, {} removals",
782 req.additions.len(),
783 req.removals.len()
784 );
785
786 Ok(Response::new(Empty {}))
789 }
790
791 async fn open_terminal(&self, request:Request<OpenTerminalRequest>) -> Result<Response<Empty>, Status> {
795 let req = request.into_inner();
796 info!("[CocoonService] Opening terminal: {}", req.name);
797
798 Err(Status::unimplemented("open_terminal not yet implemented"))
801 }
802
803 async fn terminal_input(&self, request:Request<TerminalInputRequest>) -> Result<Response<Empty>, Status> {
805 let req = request.into_inner();
806 debug!("[CocoonService] Sending input to terminal {}", req.terminal_id);
807
808 Err(Status::unimplemented("terminal_input not yet implemented"))
811 }
812
813 async fn close_terminal(&self, request:Request<CloseTerminalRequest>) -> Result<Response<Empty>, Status> {
815 let req = request.into_inner();
816 info!("[CocoonService] Closing terminal {}", req.terminal_id);
817
818 Err(Status::unimplemented("close_terminal not yet implemented"))
821 }
822
823 async fn accept_terminal_opened(
825 &self,
826 request:Request<TerminalOpenedNotification>,
827 ) -> Result<Response<Empty>, Status> {
828 let req = request.into_inner();
829 info!(
830 "[CocoonService] Terminal opened notification: {} (ID: {})",
831 req.name, req.terminal_id
832 );
833
834 Ok(Response::new(Empty {}))
837 }
838
839 async fn accept_terminal_closed(
841 &self,
842 request:Request<TerminalClosedNotification>,
843 ) -> Result<Response<Empty>, Status> {
844 let req = request.into_inner();
845 info!("[CocoonService] Terminal closed notification: {}", req.terminal_id);
846
847 Ok(Response::new(Empty {}))
850 }
851
852 async fn accept_terminal_process_id(
854 &self,
855 request:Request<TerminalProcessIdNotification>,
856 ) -> Result<Response<Empty>, Status> {
857 let req = request.into_inner();
858 debug!(
859 "[CocoonService] Terminal process ID: {} for terminal {}",
860 req.process_id, req.terminal_id
861 );
862
863 Ok(Response::new(Empty {}))
866 }
867
868 async fn accept_terminal_process_data(
870 &self,
871 request:Request<TerminalDataNotification>,
872 ) -> Result<Response<Empty>, Status> {
873 let req = request.into_inner();
874 debug!(
875 "[CocoonService] Terminal data for {}: {} bytes",
876 req.terminal_id,
877 req.data.len()
878 );
879
880 Ok(Response::new(Empty {}))
883 }
884
885 async fn register_tree_view_provider(
889 &self,
890 request:Request<RegisterTreeViewProviderRequest>,
891 ) -> Result<Response<Empty>, Status> {
892 let req = request.into_inner();
893 info!("[CocoonService] Registering tree view provider: {}", req.view_id);
894
895 Ok(Response::new(Empty {}))
898 }
899
900 async fn get_tree_children(
902 &self,
903 request:Request<GetTreeChildrenRequest>,
904 ) -> Result<Response<GetTreeChildrenResponse>, Status> {
905 let req = request.into_inner();
906 debug!("[CocoonService] Getting tree children for view {}", req.view_id);
907
908 Ok(Response::new(GetTreeChildrenResponse { items:Vec::new() }))
911 }
912
913 async fn register_scm_provider(
917 &self,
918 request:Request<RegisterScmProviderRequest>,
919 ) -> Result<Response<Empty>, Status> {
920 let req = request.into_inner();
921 info!("[CocoonService] Registering SCM provider: {}", req.scm_id);
922
923 Ok(Response::new(Empty {}))
926 }
927
928 async fn update_scm_group(&self, request:Request<UpdateScmGroupRequest>) -> Result<Response<Empty>, Status> {
930 let req = request.into_inner();
931 debug!(
932 "[CocoonService] Updating SCM group {} with provider {}",
933 req.group_id, req.provider_id
934 );
935
936 Ok(Response::new(Empty {}))
939 }
940
941 async fn git_exec(&self, request:Request<GitExecRequest>) -> Result<Response<GitExecResponse>, Status> {
943 let req = request.into_inner();
944 debug!("[CocoonService] Executing git command: {}", req.args.join(" "));
945
946 Err(Status::unimplemented("git_exec not yet implemented"))
949 }
950
951 async fn register_debug_adapter(
955 &self,
956 request:Request<RegisterDebugAdapterRequest>,
957 ) -> Result<Response<Empty>, Status> {
958 let req = request.into_inner();
959 info!("[CocoonService] Registering debug adapter: {}", req.debug_type);
960
961 Ok(Response::new(Empty {}))
964 }
965
966 async fn start_debugging(
968 &self,
969 request:Request<StartDebuggingRequest>,
970 ) -> Result<Response<StartDebuggingResponse>, Status> {
971 let req = request.into_inner();
972 info!("[CocoonService] Starting debugging session: {}", req.debug_type);
973
974 Ok(Response::new(StartDebuggingResponse { success:false }))
977 }
978
979 async fn participate_in_save(
983 &self,
984 request:Request<ParticipateInSaveRequest>,
985 ) -> Result<Response<ParticipateInSaveResponse>, Status> {
986 let req = request.into_inner();
987 debug!("[CocoonService] Participating in save for: {:?}", req.uri);
988
989 Ok(Response::new(ParticipateInSaveResponse { edits:Vec::new() }))
995 }
996
997 async fn get_secret(&self, request:Request<GetSecretRequest>) -> Result<Response<GetSecretResponse>, Status> {
1001 let req = request.into_inner();
1002 debug!("[CocoonService] Getting secret for key: {}", req.key);
1003
1004 Err(Status::unimplemented("get_secret not yet implemented"))
1007 }
1008
1009 async fn store_secret(&self, request:Request<StoreSecretRequest>) -> Result<Response<Empty>, Status> {
1011 let req = request.into_inner();
1012 debug!("[CocoonService] Storing secret for key: {}", req.key);
1013
1014 Err(Status::unimplemented("store_secret not yet implemented"))
1017 }
1018
1019 async fn delete_secret(&self, request:Request<DeleteSecretRequest>) -> Result<Response<Empty>, Status> {
1021 let req = request.into_inner();
1022 debug!("[CocoonService] Deleting secret for key: {}", req.key);
1023
1024 Err(Status::unimplemented("delete_secret not yet implemented"))
1027 }
1028}