Skip to main content

Mountain/RPC/CocoonService/Window/
ShowInputBox.rs

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