瀏覽代碼

Fix Serialize impl missing TSend (#10252)

Tony 1 年之前
父節點
當前提交
249cdde9b6

+ 1 - 1
core/tauri/src/ipc/channel.rs

@@ -50,7 +50,7 @@ const _: () = {
   struct Channel<TSend>(std::marker::PhantomData<TSend>);
 };
 
-impl Serialize for Channel {
+impl<TSend> Serialize for Channel<TSend> {
   fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
   where
     S: Serializer,

+ 4 - 6
examples/api/src-tauri/tauri-plugin-sample/src/desktop.rs

@@ -17,14 +17,12 @@ pub fn init<R: Runtime, C: DeserializeOwned>(
 /// A helper class to access the sample APIs.
 pub struct Sample<R: Runtime>(AppHandle<R>);
 
-#[derive(serde::Serialize)]
-struct Event {
-  kind: &'static str,
-}
-
 impl<R: Runtime> Sample<R> {
   pub fn ping(&self, payload: PingRequest) -> crate::Result<PingResponse> {
-    let _ = payload.on_event.send(Event { kind: "ping" });
+    let _ = payload.on_event.send(Event {
+      kind: "ping".to_string(),
+      value: payload.value.clone(),
+    });
     Ok(PingResponse {
       value: payload.value,
     })

+ 8 - 2
examples/api/src-tauri/tauri-plugin-sample/src/models.rs

@@ -6,10 +6,16 @@ use serde::{Deserialize, Serialize};
 use tauri::ipc::Channel;
 
 #[derive(Serialize)]
+pub struct Event {
+  pub kind: String,
+  pub value: Option<String>
+}
+
+#[derive(Serialize)]
+#[serde(rename_all = "camelCase")]
 pub struct PingRequest {
   pub value: Option<String>,
-  #[serde(rename = "onEvent")]
-  pub on_event: Channel,
+  pub on_event: Channel<Event>,
 }
 
 #[derive(Debug, Clone, Default, Deserialize, Serialize)]