From 9e30bf0a163e02ded50782720dd0382264d10609 Mon Sep 17 00:00:00 2001 From: rizky_denianto Date: Tue, 14 Apr 2026 19:02:16 +0700 Subject: [PATCH] Menghubungkan kotlin dengan rust --- android/src/main/java/BluclasPlugin.kt | 2 +- src/commands.rs | 19 ++++++++----- src/desktop.rs | 23 ++++++++++------ src/lib.rs | 37 ++++++++++++++------------ src/mobile.rs | 37 +++++++++++++++----------- src/models.rs | 18 +++++++------ 6 files changed, 81 insertions(+), 55 deletions(-) diff --git a/android/src/main/java/BluclasPlugin.kt b/android/src/main/java/BluclasPlugin.kt index 985eeae..5de84b4 100644 --- a/android/src/main/java/BluclasPlugin.kt +++ b/android/src/main/java/BluclasPlugin.kt @@ -1,4 +1,4 @@ -package com.plugin.bluetooth_classic +package com.plugin.bluclas import android.Manifest import android.app.Activity diff --git a/src/commands.rs b/src/commands.rs index a0bee4a..996abcf 100644 --- a/src/commands.rs +++ b/src/commands.rs @@ -1,13 +1,20 @@ -use tauri::{AppHandle, command, Runtime}; +use tauri::{command, AppHandle, Runtime}; use crate::models::*; -use crate::Result; use crate::BluclasExt; +use crate::Result; #[command] -pub(crate) async fn ping( +pub(crate) async fn daftar_perangkat( app: AppHandle, - payload: PingRequest, -) -> Result { - app.bluclas().ping(payload) +) -> Result> { + return app.bluclas().daftar_perangkat(); +} + +#[command] +pub(crate) async fn kirim( + app: AppHandle, + payload: SBluetoothClassicMuatanKirim, +) -> Result<()> { + return app.bluclas().kirim(payload); } diff --git a/src/desktop.rs b/src/desktop.rs index 2416875..a95b344 100644 --- a/src/desktop.rs +++ b/src/desktop.rs @@ -4,19 +4,26 @@ use tauri::{plugin::PluginApi, AppHandle, Runtime}; use crate::models::*; pub fn init( - app: &AppHandle, - _api: PluginApi, + app: &AppHandle, + _api: PluginApi, ) -> crate::Result> { - Ok(Bluclas(app.clone())) + Ok(Bluclas(app.clone())) } /// Access to the bluclas APIs. pub struct Bluclas(AppHandle); impl Bluclas { - pub fn ping(&self, payload: PingRequest) -> crate::Result { - Ok(PingResponse { - value: payload.value, - }) - } + pub fn daftar_perangkat(&self) -> crate::Result> { + let daftar_res: Vec = + vec![SBluetoothClassicResponPerangkat { + nama: String::new(), + alamat: String::new(), + }]; + return Ok(daftar_res); + } + + pub fn kirim(&self, _: SBluetoothClassicMuatanKirim) -> crate::Result<()> { + return Ok(()); + } } diff --git a/src/lib.rs b/src/lib.rs index fc82184..367cd81 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -1,6 +1,6 @@ use tauri::{ - plugin::{Builder, TauriPlugin}, - Manager, Runtime, + plugin::{Builder, TauriPlugin}, + Manager, Runtime, }; pub use models::*; @@ -23,26 +23,29 @@ use mobile::Bluclas; /// Extensions to [`tauri::App`], [`tauri::AppHandle`] and [`tauri::Window`] to access the bluclas APIs. pub trait BluclasExt { - fn bluclas(&self) -> &Bluclas; + fn bluclas(&self) -> &Bluclas; } impl> crate::BluclasExt for T { - fn bluclas(&self) -> &Bluclas { - self.state::>().inner() - } + fn bluclas(&self) -> &Bluclas { + self.state::>().inner() + } } /// Initializes the plugin. pub fn init() -> TauriPlugin { - Builder::new("bluclas") - .invoke_handler(tauri::generate_handler![commands::ping]) - .setup(|app, api| { - #[cfg(mobile)] - let bluclas = mobile::init(app, api)?; - #[cfg(desktop)] - let bluclas = desktop::init(app, api)?; - app.manage(bluclas); - Ok(()) - }) - .build() + Builder::new("bluclas") + .invoke_handler(tauri::generate_handler![ + commands::daftar_perangkat, + commands::kirim + ]) + .setup(|app, api| { + #[cfg(mobile)] + let bluclas = mobile::init(app, api)?; + #[cfg(desktop)] + let bluclas = desktop::init(app, api)?; + app.manage(bluclas); + Ok(()) + }) + .build() } diff --git a/src/mobile.rs b/src/mobile.rs index a37ab08..311e47e 100644 --- a/src/mobile.rs +++ b/src/mobile.rs @@ -1,7 +1,7 @@ use serde::de::DeserializeOwned; use tauri::{ - plugin::{PluginApi, PluginHandle}, - AppHandle, Runtime, + plugin::{PluginApi, PluginHandle}, + AppHandle, Runtime, }; use crate::models::*; @@ -11,24 +11,31 @@ tauri::ios_plugin_binding!(init_plugin_bluclas); // initializes the Kotlin or Swift plugin classes pub fn init( - _app: &AppHandle, - api: PluginApi, + _app: &AppHandle, + api: PluginApi, ) -> crate::Result> { - #[cfg(target_os = "android")] - let handle = api.register_android_plugin("", "ExamplePlugin")?; - #[cfg(target_os = "ios")] - let handle = api.register_ios_plugin(init_plugin_bluclas)?; - Ok(Bluclas(handle)) + #[cfg(target_os = "android")] + let handle = api.register_android_plugin("com.plugin.bluclas", "BluclasPlugin")?; + #[cfg(target_os = "ios")] + let handle = api.register_ios_plugin(init_plugin_bluclas)?; + Ok(Bluclas(handle)) } /// Access to the bluclas APIs. pub struct Bluclas(PluginHandle); impl Bluclas { - pub fn ping(&self, payload: PingRequest) -> crate::Result { - self - .0 - .run_mobile_plugin("ping", payload) - .map_err(Into::into) - } + pub fn daftar_perangkat(&self) -> crate::Result> { + return self + .0 + .run_mobile_plugin("daftarPerangkat", ()) + .map_err(Into::into); + } + + pub fn kirim(&self, payload: SBluetoothClassicMuatanKirim) -> crate::Result<()> { + return self + .0 + .run_mobile_plugin("kirim", payload) + .map_err(Into::into); + } } diff --git a/src/models.rs b/src/models.rs index 1b53e9e..42c5b61 100644 --- a/src/models.rs +++ b/src/models.rs @@ -1,13 +1,15 @@ use serde::{Deserialize, Serialize}; -#[derive(Debug, Deserialize, Serialize)] -#[serde(rename_all = "camelCase")] -pub struct PingRequest { - pub value: Option, -} - #[derive(Debug, Clone, Default, Deserialize, Serialize)] #[serde(rename_all = "camelCase")] -pub struct PingResponse { - pub value: Option, +pub struct SBluetoothClassicResponPerangkat { + pub nama: String, + pub alamat: String, +} + +#[derive(Debug, Deserialize, Serialize)] +#[serde(rename_all = "camelCase")] +pub struct SBluetoothClassicMuatanKirim { + pub alamat: String, + pub data: Vec, }