ffi_request.rs 772 B

12345678910111213141516171819202122232425262728
  1. use bytes::Bytes;
  2. use flowy_derive::ProtoBuf;
  3. use lib_dispatch::prelude::ModuleRequest;
  4. use std::convert::TryFrom;
  5. #[derive(Default, ProtoBuf)]
  6. pub struct FFIRequest {
  7. #[pb(index = 1)]
  8. pub(crate) event: String,
  9. #[pb(index = 2)]
  10. pub(crate) payload: Vec<u8>,
  11. }
  12. impl FFIRequest {
  13. pub fn from_u8_pointer(pointer: *const u8, len: usize) -> Self {
  14. let buffer = unsafe { std::slice::from_raw_parts(pointer, len) }.to_vec();
  15. let bytes = Bytes::from(buffer);
  16. let request: FFIRequest = FFIRequest::try_from(bytes).unwrap();
  17. request
  18. }
  19. }
  20. impl std::convert::From<FFIRequest> for ModuleRequest {
  21. fn from(ffi_request: FFIRequest) -> Self {
  22. ModuleRequest::new(ffi_request.event).payload(ffi_request.payload)
  23. }
  24. }