Skip to main content

DevelopmentNodeEnvironment_MicrosoftVSCodeDependency_22NodeVersion_Bundle_Clean_Debug_ElectronProfile_EsbuildCompiler_Mountain/RPC/CocoonService/Window/
ShowInputBox.rs

1//! Display an input-box UI. Returns `cancelled:true` with empty value
2//! when the user dismisses without confirming.
3
4use tonic::{Response, Status};
5use CommonLibrary::UserInterface::{
6	DTO::InputBoxOptionsDTO::InputBoxOptionsDTO,
7	UserInterfaceProvider::UserInterfaceProvider,
8};
9
10use crate::{
11	RPC::CocoonService::CocoonServiceImpl,
12	Vine::Generated::{ShowInputBoxRequest, ShowInputBoxResponse},
13	dev_log,
14};
15
16pub async fn Fn(
17	Service:&CocoonServiceImpl,
18
19	Request:ShowInputBoxRequest,
20) -> Result<Response<ShowInputBoxResponse>, Status> {
21	dev_log!("cocoon", "[CocoonService] show_input_box");
22
23	let Options = Some(InputBoxOptionsDTO {
24		Title:if Request.title.is_empty() { None } else { Some(Request.title) },
25		PlaceHolder:if Request.placeholder.is_empty() { None } else { Some(Request.placeholder) },
26		Value:if Request.value.is_empty() { None } else { Some(Request.value) },
27		Prompt:if Request.prompt.is_empty() { None } else { Some(Request.prompt) },
28		IsPassword:if Request.password { Some(true) } else { None },
29		IgnoreFocusOut:None,
30	});
31
32	match Service.environment.ShowInputBox(Options).await {
33		Ok(Some(Value)) => Ok(Response::new(ShowInputBoxResponse { value:Value, cancelled:false })),
34
35		Ok(None) => Ok(Response::new(ShowInputBoxResponse { value:String::new(), cancelled:true })),
36
37		Err(Error) => {
38			dev_log!("cocoon", "warn: [CocoonService] show_input_box failed: {}", Error);
39
40			Ok(Response::new(ShowInputBoxResponse { value:String::new(), cancelled:true }))
41		},
42	}
43}