Skip to main content

Mountain/RPC/CocoonService/Window/
ShowInputBox.rs

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