main.rs 2.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081
  1. use openngvfs_init_wasm_lib::{api_ver_get, set_auto_mount_handler, exkv_has_key, exkv_get, get_app_name, get_nagae_rov_root, vfs_mkdir};
  2. use openngvfs_init_wasm_lib::afs::AfsInstance;
  3. use openngvfs_init_wasm_lib::bep_ovfs::AfsBepOvFsInstance;
  4. use openngvfs_init_wasm_lib::error::{GetKeyError};
  5. fn main() {
  6. println!("Hello, world!");
  7. set_auto_mount_handler(auto_mount_handler);
  8. let (api_maj, api_min, api_pat) = api_ver_get();
  9. println!("API Version: {}.{}.{}", api_maj, api_min, api_pat);
  10. println!("App Name: {}", get_app_name())
  11. }
  12. fn auto_mount_handler() -> i32 {
  13. println!("auto mount test");
  14. println!("auto mount test done.");
  15. println!("==== Test for exkv_has_key ====");
  16. has_key_test("test");
  17. has_key_test("foo");
  18. has_key_test("bar");
  19. has_key_test("foobar");
  20. println!("========");
  21. println!("==== Test for exkv_get ====");
  22. get_test("test");
  23. get_test("foo");
  24. get_test("bar");
  25. get_test("foobar");
  26. println!("========");
  27. let ng_root = get_nagae_rov_root();
  28. println!("nagae root: {}", &ng_root);
  29. println!("==== Mount Test ====");
  30. let root = AfsInstance::new_afero_memfs();
  31. root.mount("/").unwrap();
  32. vfs_mkdir("/local", 0666).unwrap();
  33. vfs_mkdir("/ro", 0666).unwrap();
  34. //vfs_mkdir("/wasm", 0666).unwrap();
  35. let osfs = AfsInstance::new_afero_osfs();
  36. let local = AfsInstance::new_afero_bpfs(&osfs, &ng_root);
  37. local.mount("/local").unwrap();
  38. let local_ro = AfsInstance::new_afero_rofs(&local);
  39. local_ro.mount("/ro").unwrap();
  40. // afero.RegexpFs has some bugs with Readdir.
  41. //let only_wasm = AfsInstance::new_afero_regfs(&local_ro, "\\.wasm$");
  42. //only_wasm.mount("/wasm").unwrap();
  43. let rwcache_path = format!("{}/{}", ng_root, "cache/rwtest");
  44. let rwcache = AfsInstance::new_afero_bpfs(&osfs, &rwcache_path);
  45. root.mkdir("/overlay", 0666).unwrap();
  46. let overlay_fslayer = vec![&rwcache, &local_ro];
  47. let overlay = AfsBepOvFsInstance::new(&overlay_fslayer, true).unwrap();
  48. overlay.mount("/overlay").unwrap();
  49. 0
  50. }
  51. fn has_key_test(key: &str) {
  52. let ret = exkv_has_key(key);
  53. if ret {
  54. println!("key exists: {}", key);
  55. }else{
  56. println!("key not exists: {}", key);
  57. }
  58. }
  59. fn get_test(key: &str) {
  60. let ret = exkv_get(key);
  61. match ret {
  62. Ok(v) => {
  63. let s = String::from_utf8_lossy(v.as_slice());
  64. println!("value of key {}: {}", key, s);
  65. }
  66. Err(e) => {
  67. match e {
  68. GetKeyError::KeyNotExists => {
  69. println!("failed get value of key {}: key not exists", key);
  70. }
  71. GetKeyError::InternalError(emsg) => {
  72. println!("failed get value of key {}: internal error: {:?}", key, emsg);
  73. }
  74. }
  75. }
  76. };
  77. }