request.rs 1.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445
  1. use flowy_core::AppFlowyCore;
  2. use lib_dispatch::prelude::{
  3. AFPluginDispatcher, AFPluginEventResponse, AFPluginRequest, StatusCode,
  4. };
  5. use tauri::{AppHandle, Manager, State, Wry};
  6. #[derive(Clone, Debug, serde::Deserialize)]
  7. pub struct AFTauriRequest {
  8. ty: String,
  9. payload: Vec<u8>,
  10. }
  11. impl std::convert::From<AFTauriRequest> for AFPluginRequest {
  12. fn from(event: AFTauriRequest) -> Self {
  13. AFPluginRequest::new(event.ty).payload(event.payload)
  14. }
  15. }
  16. #[derive(Clone, serde::Serialize)]
  17. pub struct AFTauriResponse {
  18. code: StatusCode,
  19. payload: Vec<u8>,
  20. }
  21. impl std::convert::From<AFPluginEventResponse> for AFTauriResponse {
  22. fn from(response: AFPluginEventResponse) -> Self {
  23. Self {
  24. code: response.status_code,
  25. payload: response.payload.to_vec(),
  26. }
  27. }
  28. }
  29. // Learn more about Tauri commands at https://tauri.app/v1/guides/features/command
  30. #[tauri::command]
  31. pub async fn invoke_request(
  32. request: AFTauriRequest,
  33. app_handler: AppHandle<Wry>,
  34. ) -> AFTauriResponse {
  35. let request: AFPluginRequest = request.into();
  36. let state: State<AppFlowyCore> = app_handler.state();
  37. let dispatcher = state.inner().dispatcher();
  38. let response = AFPluginDispatcher::async_send(dispatcher, request).await;
  39. response.into()
  40. }