Как в Rust фоном запустить Discord RPC?

Разрабатываю Tauri приложение, столкнулся со следующей проблемой: Требуется отображать через Discord RPC текущее состояние в приложении, решил использовать библиотеку discord_rich_presence

use discord_rich_presence::{activity, DiscordIpc, DiscordIpcClient};

fn main() {
    let mut client = DiscordIpcClient::new("1222240908393844876").unwrap();
    match client.connect() {
        Ok(t) => t,
        Err(err) => return ()
    }

    client.set_activity(activity::Activity::new()
        .details("Находится в лаунчере")
        .assets(discord_rich_presence::activity::Assets::new()
            .large_image("logo")
        )
    ).expect("Cannot set activity message!");

    std::thread::park();
}

Cargo.toml:

[package]
name = "rust_learn"
version = "0.1.0"
edition = "2021"

# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html

[dependencies]
discord-rich-presence = "0.2.3"

Код работает, но при встраивании в tauri код строчка std::thread::park() не даёт запустить само приложение:

fn main() {
  let mut client = DiscordIpcClient::new("1222240908393844876").unwrap();
  match client.connect() {
    Ok(t) => t,
    Err(err) => return ()
  }

  client.set_activity(activity::Activity::new()
      .details("Находится в лаунчере")
      .assets(discord_rich_presence::activity::Assets::new()
          .large_image("logo")
      )
  ).expect("Cannot set activity message!");

  std::thread::park();

  tauri::Builder::default()
      .invoke_handler(tauri::generate_handler![check_version, download_version])
      .run(tauri::generate_context!())
      .expect("failed to run app");
}

Как запустить Discord RPC фоновым приложением, или каким-либо другим образом, чтобы Tauri приложение работало?

Дополнение: Попробовал добавить client.close() вместо паркинга - через 15 секунд активность пропадает.


Ответы (1 шт):

Автор решения: mealet

Discord RPC работает пока запущена команда, а соответственно мне было достаточно вставить код перед запуском Tauri приложения и убрать std::thread::park() дабы оно запустилось.

Собственно вот рабочий код:

use discord_rich_presence::{activity, DiscordIpc, DiscordIpcClient};
use chrono::Utc;

fn main() {
  let client_id = "1222240908393844876";
  let mut client = DiscordIpcClient::new(client_id).unwrap();
  client.connect().unwrap();

  let timestamp = Utc::now().timestamp();

  client.set_activity(activity::Activity::new()
      .details("В лаунчере")
      .timestamps(discord_rich_presence::activity::Timestamps::new()
          .start(timestamp)
      )
      .assets(discord_rich_presence::activity::Assets::new()
          .large_image("logo")
      )
  ).expect("Cannot set activity message!");

  tauri::Builder::default()
      .invoke_handler(tauri::generate_handler![ check_version, download_version, launch_minecraft ])
      .run(tauri::generate_context!())
      .expect("failed to run app");
}
→ Ссылка