diff --git a/examples/rust/src/finclip.rs b/examples/rust/src/finclip.rs index c4b8888..3584aef 100644 --- a/examples/rust/src/finclip.rs +++ b/examples/rust/src/finclip.rs @@ -94,6 +94,29 @@ extern "C" { #[allow(dead_code)] pub fn finclip_close_all_applet() -> c_int; + + #[allow(dead_code)] + pub fn finclip_batch_app_info( + appid: *const c_char, + req_list: *const c_char, + callback: ApiCallback, + input: *mut c_void, + ) -> c_int; + + #[allow(dead_code)] + pub fn finclip_search_app( + appid: *const c_char, + search_text: *const c_char, + callback: ApiCallback, + input: *mut c_void, + ) -> c_int; + + #[allow(dead_code)] + pub fn finclip_callback_res( + appid: *const c_char, + callback_id: c_int, + result: *mut c_void, + ) -> c_int; } fn str_to_cstr(k: &str) -> Result { @@ -176,7 +199,10 @@ pub mod wrapper { #[allow(dead_code)] pub fn params_del(params: *mut FinclipParams, key: &str) -> Result<(), NulError> { - unsafe { finclip_params_del(params, str_to_cstr(key)?.as_ptr()); Ok(()) } + unsafe { + finclip_params_del(params, str_to_cstr(key)?.as_ptr()); + Ok(()) + } } #[allow(dead_code)] @@ -196,7 +222,7 @@ pub mod wrapper { pub fn config_packer_get_config( packer: *mut IFinConfigPacker, appstore: &str, - ) -> Result<*mut FinclipParams,NulError> { + ) -> Result<*mut FinclipParams, NulError> { unsafe { let ret = finclip_config_packer_get_config(packer, str_to_cstr(appstore)?.as_ptr()); Ok(ret) @@ -204,13 +230,28 @@ pub mod wrapper { } #[allow(dead_code)] - pub fn set_position(appid: &str, left: c_int, top: c_int, width: c_int, height: c_int)->Result<(),NulError> { - unsafe { finclip_set_position(str_to_cstr(appid)?.as_ptr(), left, top, width, height);Ok(()) } + pub fn set_position( + appid: &str, + left: c_int, + top: c_int, + width: c_int, + height: c_int, + ) -> Result<(), NulError> { + unsafe { + finclip_set_position(str_to_cstr(appid)?.as_ptr(), left, top, width, height); + Ok(()) + } } #[allow(dead_code)] - pub fn start_applet(appstore: &str, appid: &str) -> Result { - unsafe { let ret = finclip_start_applet(str_to_cstr(appstore)?.as_ptr(), str_to_cstr(appid)?.as_ptr());Ok(ret) } + pub fn start_applet(appstore: &str, appid: &str) -> Result { + unsafe { + let ret = finclip_start_applet( + str_to_cstr(appstore)?.as_ptr(), + str_to_cstr(appid)?.as_ptr(), + ); + Ok(ret) + } } #[allow(dead_code)] @@ -220,7 +261,7 @@ pub mod wrapper { apis: &str, handle: ApiHandler, input: *mut c_void, - ) ->Result<(),NulError>{ + ) -> Result<(), NulError> { unsafe { finclip_register_api( packer, @@ -241,7 +282,7 @@ pub mod wrapper { params: &str, callback: ApiCallback, input: *mut c_void, - ) -> Result { + ) -> Result { unsafe { let ret = finclip_invoke_api( typ as c_int, @@ -256,8 +297,11 @@ pub mod wrapper { } #[allow(dead_code)] - pub fn close_applet(appid: &str) -> Result { - unsafe { let ret=finclip_close_applet(str_to_cstr(appid)?.as_ptr()); Ok(ret) } + pub fn close_applet(appid: &str) -> Result { + unsafe { + let ret = finclip_close_applet(str_to_cstr(appid)?.as_ptr()); + Ok(ret) + } } #[allow(dead_code)] @@ -266,7 +310,7 @@ pub mod wrapper { } #[allow(dead_code)] - pub fn applet_set_params(params: *mut FinclipParams, from: &AppParams) -> Result<(),NulError> { + pub fn applet_set_params(params: *mut FinclipParams, from: &AppParams) -> Result<(), NulError> { for k in &from.params { params_set(params, k.0.as_str(), k.1.as_str())?; } @@ -281,4 +325,56 @@ pub mod wrapper { params_set(params, "show_loading", from.show_loading.as_str())?; Ok(()) } + + #[allow(dead_code)] + pub fn batch_app_info( + appid: &str, + req_list: &str, + callback: ApiCallback, + input: *mut c_void, + ) -> Result { + unsafe { + let ret = finclip_batch_app_info( + str_to_cstr(appid)?.as_ptr(), + str_to_cstr(req_list)?.as_ptr(), + callback, + input, + ); + Ok(ret) + } + } + + #[allow(dead_code)] + pub fn search_app( + appid: &str, + search_text: &str, + callback: ApiCallback, + input: *mut c_void, + ) -> Result { + unsafe { + let ret = finclip_search_app( + str_to_cstr(appid)?.as_ptr(), + str_to_cstr(search_text)?.as_ptr(), + callback, + input, + ); + Ok(ret) + } + } + + #[allow(dead_code)] + pub fn callback_res( + appid: &str, + callback_id: c_int, + result: *mut FinclipParams, + ) -> Result { + unsafe { + let ret = finclip_callback_res( + str_to_cstr(appid)?.as_ptr(), + callback_id, + result as *mut c_void, + ); + Ok(ret) + } + } } diff --git a/examples/rust/src/main.rs b/examples/rust/src/main.rs index 20ced3a..56d255a 100644 --- a/examples/rust/src/main.rs +++ b/examples/rust/src/main.rs @@ -5,7 +5,7 @@ extern crate serde_json; mod finclip; use anyhow::Result; -use finclip::wrapper; +use finclip::*; use finclip::FinClipApiType; use fltk::dialog; use fltk::enums::{Align, Event}; @@ -34,7 +34,7 @@ extern "C" fn web_api_callback(res: *const c_char, input: *mut c_void) { } } -extern "C" fn web_api_example( +extern "C" fn openapi_search( event: *const c_char, param: *const c_char, input: *mut c_void, @@ -42,16 +42,23 @@ extern "C" fn web_api_example( ) { unsafe { let data = &*(input as *mut Arc>); + let appid = { + let d = &mut data.lock().unwrap(); + d.appid.buffer().unwrap().text() + }; + wrapper::batch_app_info(&appid, + "62f5c1e08f13e800017fa823,62f47da680b7ba0001de5701,62f47ce980b7ba0001de56fc,62f479dc80b7ba0001de56f8,62f625408f13e800017fa873", + batch_app_info_callback, input).unwrap(); println!( - ">> web_api_example {} {} {}", + ">> openapi_search {} {} {}", CStr::from_ptr(event).to_str().unwrap(), CStr::from_ptr(param).to_str().unwrap(), - data.lock().unwrap().appid.buffer().unwrap().text(), + appid, ); } } -extern "C" fn app_api_example( +extern "C" fn mock_login( event: *const c_char, param: *const c_char, input: *mut c_void, @@ -68,6 +75,66 @@ extern "C" fn app_api_example( } } +extern "C" fn navigate_to_mini_program( + event: *const c_char, + param: *const c_char, + input: *mut c_void, + _res: *mut c_void, +) { + unsafe { + let data = &*(input as *mut Arc>); + println!( + ">> app_api_example {} {} {}", + CStr::from_ptr(event).to_str().unwrap(), + CStr::from_ptr(param).to_str().unwrap(), + data.lock().unwrap().appid.buffer().unwrap().text(), + ); + } +} + +extern "C" fn get_domain( + event: *const c_char, + param: *const c_char, + input: *mut c_void, + _res: *mut c_void, +) { + unsafe { + let data = &*(input as *mut Arc>); + println!( + ">> app_api_example {} {} {}", + CStr::from_ptr(event).to_str().unwrap(), + CStr::from_ptr(param).to_str().unwrap(), + data.lock().unwrap().appid.buffer().unwrap().text(), + ); + } +} + +extern "C" fn batch_app_info_callback(res: *const c_char, input: *mut c_void) { + unsafe { + let data = &*(input as *mut Arc>); + let appid = + data.lock().unwrap().appid.buffer().unwrap().text(); + + println!( + ">> batch_app_info_callback {}", + CStr::from_ptr(res).to_str().unwrap() + ); + let result = wrapper::create_params(); + wrapper::params_set(result, "data", CStr::from_ptr(res).to_str().unwrap()).unwrap(); + //wrapper::callback_res(&appid, 0, result).unwrap(); //TODO: + wrapper::destory_params(result); + } +} + +extern "C" fn search_app_callback(res: *const c_char, _input: *mut c_void) { + unsafe { + println!( + ">> search app {}", + CStr::from_ptr(res).to_str().unwrap() + ); + } +} + fn start_normal(win_elems: Arc>, cfg: &finclip::AppParams) -> Result<()> { let factory = wrapper::get_packer_factory(); let packer = wrapper::packer_factory_get_config_packer(factory); @@ -75,16 +142,30 @@ fn start_normal(win_elems: Arc>, cfg: &finclip::AppParams) -> Res let cfg_ptr = &win_elems as *const _ as *mut c_void; wrapper::register_api( packer, - FinClipApiType::WebView, - "test", - web_api_example, + FinClipApiType::Applet, + "openapi_search", + openapi_search, cfg_ptr, )?; wrapper::register_api( packer, FinClipApiType::Applet, - "test", - app_api_example, + "mock_login", + mock_login, + cfg_ptr, + )?; + wrapper::register_api( + packer, + FinClipApiType::Applet, + "navigate_to_mini_program", + navigate_to_mini_program, + cfg_ptr, + )?; + wrapper::register_api( + packer, + FinClipApiType::Applet, + "get_domain", + get_domain, cfg_ptr, )?; let res = wrapper::initialize(packer); @@ -151,12 +232,14 @@ struct WinElem { btn_start: Button, btn_close: Button, btn_call: Button, + btn_batch: Button, + btn_search: Button, } impl WinElem { fn new() -> Result { let wind = { - const SIZE: (i32, i32) = (655, 460); + const SIZE: (i32, i32) = (655, 490); let (x, y) = center(SIZE.0, SIZE.1); Window::new(x, y, SIZE.0, SIZE.1, "rustdemo") }; @@ -172,6 +255,8 @@ impl WinElem { btn_start: Button::new(100, 420, 130, 25, "启动"), btn_close: Button::new(255, 420, 130, 25, "关闭所有小程序"), btn_call: Button::new(400, 420, 130, 25, "调用webview api"), + btn_batch: Button::new(100, 455, 130, 25, "批量获取app"), + btn_search: Button::new(255, 455, 130, 25, "搜索app"), }; let align = Align::Left | Align::Inside; Frame::new(10, 42, 100, 20, "appid").with_align(align); @@ -320,6 +405,44 @@ impl WinElem { } }); + elems.btn_batch.set_callback({ + let data = this.clone(); + move |_| { + let appid = { + let d = &mut data.lock().unwrap(); + d.appid.buffer().unwrap().text() + }; + let cfg_ptr = &data as *const _ as *mut c_void; + let res = wrapper::batch_app_info( + appid.as_str(), + "62f5c1e08f13e800017fa823,62f47da680b7ba0001de5701,62f47ce980b7ba0001de56fc,62f479dc80b7ba0001de56f8,62f625408f13e800017fa873", + batch_app_info_callback, + cfg_ptr, + ) + .unwrap(); + println!("batch app info. result: {}", res); + } + }); + + elems.btn_search.set_callback({ + let data = this.clone(); + move |_| { + let appid = { + let d = &mut data.lock().unwrap(); + d.appid.buffer().unwrap().text() + }; + let cfg_ptr = &data as *const _ as *mut c_void; + let res = wrapper::search_app( + appid.as_str(), + "实例", + search_app_callback, + cfg_ptr, + ) + .unwrap(); + println!("search app. result: {}", res); + } + }); + elems.load_config()?; Ok(()) }