use serde::{Deserialize, Serialize};
use serde_with::skip_serializing_none;
use typed_builder::TypedBuilder;
use crate::{
extern_functions::{alert, confirm, prompt},
helpers::*,
};
use crate::error::Error;
pub struct Dialog;
impl Dialog {
pub async fn alert(options: impl Into<AlertOptions>) -> Result<(), Error> {
run_value_unit(options, alert).await
}
pub async fn prompt(options: impl Into<PromptOptions>) -> Result<PromptResult, Error> {
run_value_value(options, prompt).await
}
pub async fn confirm(options: impl Into<ConfirmOptions>) -> Result<ConfirmResult, Error> {
run_value_value(options, confirm).await
}
}
#[skip_serializing_none]
#[derive(Clone, Default, Debug, PartialEq, Eq, Serialize, Deserialize, TypedBuilder)]
#[serde(rename_all = "camelCase", default)]
pub struct AlertOptions {
#[builder(setter(into))]
pub title: String,
#[builder(setter(into))]
pub message: String,
#[builder(setter(into))]
pub button_title: String,
}
#[skip_serializing_none]
#[derive(Clone, Default, Debug, PartialEq, Eq, Serialize, Deserialize)]
#[serde(rename_all = "camelCase", default)]
pub struct PromptResult {
pub value: String,
pub cancelled: bool,
}
#[skip_serializing_none]
#[derive(Clone, Default, Debug, PartialEq, Eq, Serialize, Deserialize, TypedBuilder)]
#[serde(rename_all = "camelCase", default)]
pub struct PromptOptions {
#[builder(setter(into))]
pub title: String,
#[builder(setter(into))]
pub message: String,
#[builder(setter(into))]
pub ok_button_title: String,
#[builder(setter(into))]
pub cancel_button_title: String,
#[builder(setter(into, strip_option), default)]
pub input_placeholder: Option<String>,
#[builder(setter(into, strip_option), default)]
pub input_text: Option<String>,
}
#[skip_serializing_none]
#[derive(Clone, Default, Debug, PartialEq, Eq, Serialize, Deserialize)]
#[serde(rename_all = "camelCase", default)]
pub struct ConfirmResult {
pub value: bool,
}
#[skip_serializing_none]
#[derive(Clone, Default, Debug, PartialEq, Eq, Serialize, Deserialize, TypedBuilder)]
#[serde(rename_all = "camelCase", default)]
pub struct ConfirmOptions {
#[builder(setter(into))]
pub title: String,
#[builder(setter(into))]
pub message: String,
#[builder(setter(into))]
pub ok_button_title: String,
#[builder(setter(into))]
pub cancel_button_title: String,
}