2021-05-02 21:34:15 +03:00
|
|
|
// Copyright 2019-2021 Tauri Programme within The Commons Conservancy
|
|
|
|
// SPDX-License-Identifier: Apache-2.0
|
|
|
|
// SPDX-License-Identifier: MIT
|
|
|
|
|
|
|
|
#![cfg_attr(
|
|
|
|
all(not(debug_assertions), target_os = "windows"),
|
|
|
|
windows_subsystem = "windows"
|
|
|
|
)]
|
|
|
|
|
2021-05-05 20:32:13 +03:00
|
|
|
// we move some basic commands to a separate module just to show it works
|
|
|
|
mod commands;
|
2021-05-12 18:56:16 +03:00
|
|
|
use commands::{cmd, invoke, message, resolver};
|
2021-05-05 20:32:13 +03:00
|
|
|
|
|
|
|
use serde::Deserialize;
|
2021-07-15 13:05:29 +03:00
|
|
|
use tauri::{command, State, Window};
|
2021-05-05 20:32:13 +03:00
|
|
|
|
2021-05-02 21:34:15 +03:00
|
|
|
#[derive(Debug)]
|
2021-05-05 20:32:13 +03:00
|
|
|
pub struct MyState {
|
2021-09-21 16:24:48 +03:00
|
|
|
#[allow(dead_code)]
|
2021-05-02 21:34:15 +03:00
|
|
|
value: u64,
|
2021-09-21 16:24:48 +03:00
|
|
|
#[allow(dead_code)]
|
2021-05-02 21:34:15 +03:00
|
|
|
label: String,
|
|
|
|
}
|
|
|
|
|
2021-05-09 14:52:20 +03:00
|
|
|
#[derive(Debug, serde::Serialize)]
|
|
|
|
enum MyError {
|
|
|
|
FooError,
|
|
|
|
}
|
|
|
|
|
2021-05-05 20:32:13 +03:00
|
|
|
// ------------------------ Commands using Window ------------------------
|
|
|
|
#[command]
|
2021-05-11 20:32:11 +03:00
|
|
|
fn window_label(window: Window) {
|
2021-05-05 20:32:13 +03:00
|
|
|
println!("window label: {}", window.label());
|
2021-05-02 21:34:15 +03:00
|
|
|
}
|
|
|
|
|
|
|
|
// Async commands
|
|
|
|
|
2021-05-05 20:32:13 +03:00
|
|
|
#[command]
|
2021-05-02 21:34:15 +03:00
|
|
|
async fn async_simple_command(argument: String) {
|
|
|
|
println!("{}", argument);
|
|
|
|
}
|
|
|
|
|
2021-05-05 20:32:13 +03:00
|
|
|
#[command]
|
2021-05-09 14:52:20 +03:00
|
|
|
async fn async_stateful_command(
|
|
|
|
argument: Option<String>,
|
|
|
|
state: State<'_, MyState>,
|
|
|
|
) -> Result<(), ()> {
|
2021-05-02 21:34:15 +03:00
|
|
|
println!("{:?} {:?}", argument, state.inner());
|
2021-05-09 14:52:20 +03:00
|
|
|
Ok(())
|
2021-05-02 21:34:15 +03:00
|
|
|
}
|
|
|
|
|
2021-05-09 14:52:20 +03:00
|
|
|
// Raw future commands
|
|
|
|
#[command(async)]
|
|
|
|
fn future_simple_command(argument: String) -> impl std::future::Future<Output = ()> {
|
|
|
|
println!("{}", argument);
|
|
|
|
std::future::ready(())
|
|
|
|
}
|
|
|
|
|
|
|
|
#[command(async)]
|
|
|
|
fn future_simple_command_with_return(
|
|
|
|
argument: String,
|
|
|
|
) -> impl std::future::Future<Output = String> {
|
|
|
|
println!("{}", argument);
|
|
|
|
std::future::ready(argument)
|
|
|
|
}
|
|
|
|
|
|
|
|
#[command(async)]
|
|
|
|
fn future_simple_command_with_result(
|
|
|
|
argument: String,
|
|
|
|
) -> impl std::future::Future<Output = Result<String, ()>> {
|
|
|
|
println!("{}", argument);
|
|
|
|
std::future::ready(Ok(argument))
|
|
|
|
}
|
|
|
|
|
|
|
|
#[command(async)]
|
|
|
|
fn force_async(argument: String) -> String {
|
|
|
|
argument
|
|
|
|
}
|
2021-05-02 21:34:15 +03:00
|
|
|
|
2021-05-09 14:52:20 +03:00
|
|
|
#[command(async)]
|
|
|
|
fn force_async_with_result(argument: &str) -> Result<&str, MyError> {
|
|
|
|
(!argument.is_empty())
|
|
|
|
.then(|| argument)
|
|
|
|
.ok_or(MyError::FooError)
|
|
|
|
}
|
|
|
|
|
|
|
|
// ------------------------ Commands returning Result ------------------------
|
2021-05-02 21:34:15 +03:00
|
|
|
|
2021-05-05 20:32:13 +03:00
|
|
|
#[command]
|
2021-05-09 14:52:20 +03:00
|
|
|
fn simple_command_with_result(argument: String) -> Result<String, MyError> {
|
2021-05-02 21:34:15 +03:00
|
|
|
println!("{}", argument);
|
2021-05-09 14:52:20 +03:00
|
|
|
(!argument.is_empty())
|
|
|
|
.then(|| argument)
|
|
|
|
.ok_or(MyError::FooError)
|
2021-05-02 21:34:15 +03:00
|
|
|
}
|
|
|
|
|
2021-05-05 20:32:13 +03:00
|
|
|
#[command]
|
2021-05-02 21:34:15 +03:00
|
|
|
fn stateful_command_with_result(
|
|
|
|
argument: Option<String>,
|
2021-05-05 20:32:13 +03:00
|
|
|
state: State<'_, MyState>,
|
2021-05-09 14:52:20 +03:00
|
|
|
) -> Result<String, MyError> {
|
2021-05-02 21:34:15 +03:00
|
|
|
println!("{:?} {:?}", argument, state.inner());
|
2021-05-09 14:52:20 +03:00
|
|
|
dbg!(argument.ok_or(MyError::FooError))
|
2021-05-02 21:34:15 +03:00
|
|
|
}
|
|
|
|
|
|
|
|
// Async commands
|
|
|
|
|
2021-05-05 20:32:13 +03:00
|
|
|
#[command]
|
2021-05-09 14:52:20 +03:00
|
|
|
async fn async_simple_command_with_result(argument: String) -> Result<String, MyError> {
|
2021-05-02 21:34:15 +03:00
|
|
|
println!("{}", argument);
|
|
|
|
Ok(argument)
|
|
|
|
}
|
|
|
|
|
2021-05-05 20:32:13 +03:00
|
|
|
#[command]
|
2021-05-02 21:34:15 +03:00
|
|
|
async fn async_stateful_command_with_result(
|
|
|
|
argument: Option<String>,
|
2021-05-05 20:32:13 +03:00
|
|
|
state: State<'_, MyState>,
|
2021-05-09 14:52:20 +03:00
|
|
|
) -> Result<String, MyError> {
|
2021-05-02 21:34:15 +03:00
|
|
|
println!("{:?} {:?}", argument, state.inner());
|
|
|
|
Ok(argument.unwrap_or_else(|| "".to_string()))
|
|
|
|
}
|
|
|
|
|
2021-05-05 20:32:13 +03:00
|
|
|
// Non-Ident command function arguments
|
|
|
|
|
|
|
|
#[command]
|
2021-07-15 13:05:29 +03:00
|
|
|
fn command_arguments_wild(_: Window) {
|
2021-05-05 20:32:13 +03:00
|
|
|
println!("we saw the wildcard!")
|
|
|
|
}
|
|
|
|
|
|
|
|
#[derive(Deserialize)]
|
|
|
|
struct Person<'a> {
|
|
|
|
name: &'a str,
|
|
|
|
age: u8,
|
|
|
|
}
|
|
|
|
|
|
|
|
#[command]
|
2021-10-22 16:04:42 +03:00
|
|
|
fn command_arguments_struct(Person { name, age }: Person<'_>) {
|
2021-05-05 20:32:13 +03:00
|
|
|
println!("received person struct with name: {} | age: {}", name, age)
|
|
|
|
}
|
|
|
|
|
|
|
|
#[derive(Deserialize)]
|
|
|
|
struct InlinePerson<'a>(&'a str, u8);
|
|
|
|
|
|
|
|
#[command]
|
2021-10-22 16:04:42 +03:00
|
|
|
fn command_arguments_tuple_struct(InlinePerson(name, age): InlinePerson<'_>) {
|
2021-05-05 20:32:13 +03:00
|
|
|
println!("received person tuple with name: {} | age: {}", name, age)
|
|
|
|
}
|
|
|
|
|
2021-05-09 14:52:20 +03:00
|
|
|
#[command]
|
|
|
|
fn borrow_cmd(argument: &str) -> &str {
|
|
|
|
argument
|
|
|
|
}
|
|
|
|
|
|
|
|
#[command]
|
|
|
|
fn borrow_cmd_async(argument: &str) -> &str {
|
|
|
|
argument
|
|
|
|
}
|
|
|
|
|
2021-05-02 21:34:15 +03:00
|
|
|
fn main() {
|
|
|
|
tauri::Builder::default()
|
|
|
|
.manage(MyState {
|
|
|
|
value: 0,
|
|
|
|
label: "Tauri!".into(),
|
|
|
|
})
|
|
|
|
.invoke_handler(tauri::generate_handler![
|
2021-05-09 14:52:20 +03:00
|
|
|
borrow_cmd,
|
|
|
|
borrow_cmd_async,
|
2021-05-05 20:32:13 +03:00
|
|
|
window_label,
|
2021-05-09 14:52:20 +03:00
|
|
|
force_async,
|
|
|
|
force_async_with_result,
|
2021-05-05 20:32:13 +03:00
|
|
|
commands::simple_command,
|
|
|
|
commands::stateful_command,
|
2021-05-12 17:17:33 +03:00
|
|
|
cmd,
|
2021-05-12 18:22:05 +03:00
|
|
|
invoke,
|
2021-05-12 18:56:16 +03:00
|
|
|
message,
|
|
|
|
resolver,
|
2021-05-02 21:34:15 +03:00
|
|
|
async_simple_command,
|
2021-05-09 14:52:20 +03:00
|
|
|
future_simple_command,
|
2021-05-02 21:34:15 +03:00
|
|
|
async_stateful_command,
|
2021-05-05 20:32:13 +03:00
|
|
|
command_arguments_wild,
|
|
|
|
command_arguments_struct,
|
2021-05-02 21:34:15 +03:00
|
|
|
simple_command_with_result,
|
|
|
|
stateful_command_with_result,
|
2021-05-05 20:32:13 +03:00
|
|
|
command_arguments_tuple_struct,
|
2021-05-02 21:34:15 +03:00
|
|
|
async_simple_command_with_result,
|
2021-05-09 14:52:20 +03:00
|
|
|
future_simple_command_with_return,
|
|
|
|
future_simple_command_with_result,
|
2021-05-05 20:32:13 +03:00
|
|
|
async_stateful_command_with_result,
|
2021-05-02 21:34:15 +03:00
|
|
|
])
|
2022-07-04 02:26:32 +03:00
|
|
|
.run(tauri::generate_context!(
|
|
|
|
"../../examples/commands/tauri.conf.json"
|
|
|
|
))
|
2021-05-02 21:34:15 +03:00
|
|
|
.expect("error while running tauri application");
|
|
|
|
}
|