diff --git a/.gitignore b/.gitignore --- a/.gitignore +++ b/.gitignore @@ -34,4 +34,4 @@ # Nix result* -services/backup/rust_lib/target/ +services/backup/blob_client/target/ diff --git a/services/backup/CMakeLists.txt b/services/backup/CMakeLists.txt --- a/services/backup/CMakeLists.txt +++ b/services/backup/CMakeLists.txt @@ -60,7 +60,7 @@ ${SOURCE_CODE} ) -add_library_rust(PATH rust_lib NAMESPACE backup) +add_library_rust(PATH blob_client NAMESPACE backup) target_include_directories( backup @@ -88,7 +88,7 @@ comm-backup-grpc comm-services-common comm-server-base-reactors - backup::rust_lib + backup::blob_client ) target_link_libraries( diff --git a/services/backup/rust_lib/Cargo.lock b/services/backup/blob_client/Cargo.lock rename from services/backup/rust_lib/Cargo.lock rename to services/backup/blob_client/Cargo.lock diff --git a/services/backup/rust_lib/Cargo.toml b/services/backup/blob_client/Cargo.toml rename from services/backup/rust_lib/Cargo.toml rename to services/backup/blob_client/Cargo.toml --- a/services/backup/rust_lib/Cargo.toml +++ b/services/backup/blob_client/Cargo.toml @@ -1,5 +1,5 @@ [package] -name = "rust_lib" +name = "blob_client" version = "0.1.0" edition = "2021" diff --git a/services/backup/rust_lib/build.rs b/services/backup/blob_client/build.rs rename from services/backup/rust_lib/build.rs rename to services/backup/blob_client/build.rs diff --git a/services/backup/rust_lib/src/constants.rs b/services/backup/blob_client/src/constants.rs rename from services/backup/rust_lib/src/constants.rs rename to services/backup/blob_client/src/constants.rs diff --git a/services/backup/blob_client/src/get_client.rs b/services/backup/blob_client/src/get_client.rs new file mode 100644 --- /dev/null +++ b/services/backup/blob_client/src/get_client.rs @@ -0,0 +1 @@ + diff --git a/services/backup/blob_client/src/lib.rs b/services/backup/blob_client/src/lib.rs new file mode 100644 --- /dev/null +++ b/services/backup/blob_client/src/lib.rs @@ -0,0 +1,16 @@ +mod constants; +mod get_client; +mod put_client; + +use put_client::{ + put_client_initialize_cxx, put_client_send_cxx, put_client_terminate_cxx, +}; + +#[cxx::bridge] +mod ffi { + extern "Rust" { + fn put_client_initialize_cxx() -> (); + unsafe fn put_client_send_cxx(data: *const c_char) -> (); + fn put_client_terminate_cxx() -> (); + } +} diff --git a/services/backup/rust_lib/src/lib.rs b/services/backup/blob_client/src/put_client.rs rename from services/backup/rust_lib/src/lib.rs rename to services/backup/blob_client/src/put_client.rs --- a/services/backup/rust_lib/src/lib.rs +++ b/services/backup/blob_client/src/put_client.rs @@ -1,39 +1,27 @@ -#[cxx::bridge] -mod ffi { - extern "Rust" { - fn rust_is_initialized_cxx() -> bool; - fn rust_initialize_cxx() -> (); - unsafe fn rust_process_cxx(data: *const c_char) -> (); - fn rust_terminate_cxx() -> (); - } -} - -mod constants; - -use constants::MPSC_CHANNEL_BUFFER_CAPACITY; +use crate::constants::MPSC_CHANNEL_BUFFER_CAPACITY; +use lazy_static::lazy_static; +use std::sync::{Arc, Mutex}; use tokio::runtime::Runtime; use tokio::sync::mpsc; use tokio::task::JoinHandle; -use lazy_static::lazy_static; -use std::sync::{Arc, Mutex}; extern crate libc; use libc::c_char; use std::ffi::CStr; -pub struct Client { +struct Client { tx: Option>, handle: Option>, } lazy_static! { - pub static ref CLIENT: Arc> = Arc::new(Mutex::new(Client { + static ref CLIENT: Arc> = Arc::new(Mutex::new(Client { tx: None, handle: None })); - pub static ref RUNTIME: Runtime = Runtime::new().unwrap(); + static ref RUNTIME: Runtime = Runtime::new().unwrap(); } -pub fn rust_is_initialized_cxx() -> bool { +fn is_initialized() -> bool { if CLIENT.lock().expect("access client").tx.is_none() { return false; } @@ -43,15 +31,16 @@ return true; } -pub fn rust_initialize_cxx() -> () { +pub fn put_client_initialize_cxx() -> () { println!("[RUST] initializing"); - assert!(!rust_is_initialized_cxx(), "client cannot be initialized twice"); + assert!(!is_initialized(), "client cannot be initialized twice"); let (tx, mut rx): (mpsc::Sender, mpsc::Receiver) = mpsc::channel(MPSC_CHANNEL_BUFFER_CAPACITY); let handle = RUNTIME.spawn(async move { println!("[RUST] [receiver] begin"); while let Some(data) = rx.recv().await { println!("[RUST] [receiver] data: {}", data); + // todo: send throug grpc here } println!("[RUST] [receiver] done"); }); @@ -60,11 +49,11 @@ println!("[RUST] initialized"); } -pub fn rust_process_cxx(data: *const c_char) -> () { - println!("[RUST] [rust_process] begin"); +pub fn put_client_send_cxx(data: *const c_char) -> () { + println!("[RUST] [put_client_process] begin"); let c_str: &CStr = unsafe { CStr::from_ptr(data) }; let str: String = c_str.to_str().unwrap().to_owned(); - println!("[RUST] [rust_process] data string: {}", str); + println!("[RUST] [put_client_process] data string: {}", str); // this works RUNTIME.block_on(async { @@ -78,11 +67,11 @@ .await .expect("send data to receiver"); }); - println!("[RUST] [rust_process] end"); + println!("[RUST] [put_client_process] end"); } -pub fn rust_terminate_cxx() -> () { - println!("[RUST] rust_terminating"); +pub fn put_client_terminate_cxx() -> () { + println!("[RUST] put_client_terminating"); let handle = CLIENT.lock().expect("access client").handle.take().unwrap(); drop(CLIENT.lock().expect("access client").tx.take().unwrap()); @@ -90,6 +79,6 @@ handle.await.unwrap(); }); - assert!(!rust_is_initialized_cxx(), "client handler released properly"); - println!("[RUST] rust_terminated"); + assert!(!is_initialized(), "client handler released properly"); + println!("[RUST] put_client_terminated"); }