diff options
Diffstat (limited to 'rust')
| -rw-r--r-- | rust/src/secrets_provider.rs | 8 | ||||
| -rw-r--r-- | rust/tests/secrets_provider.rs | 8 |
2 files changed, 11 insertions, 5 deletions
diff --git a/rust/src/secrets_provider.rs b/rust/src/secrets_provider.rs index a310b08e..da7bdece 100644 --- a/rust/src/secrets_provider.rs +++ b/rust/src/secrets_provider.rs @@ -8,7 +8,7 @@ use crate::string::{BnString, IntoCStr}; pub trait SecretsProvider { fn has_data(&mut self, key: &str) -> bool; - fn get_data(&mut self, key: &str) -> String; + fn get_data(&mut self, key: &str) -> Option<String>; fn store_data(&mut self, key: &str, data: &str) -> bool; fn delete_data(&mut self, key: &str) -> bool; } @@ -126,8 +126,10 @@ unsafe extern "C" fn cb_get_data<C: SecretsProvider>( key: *const c_char, ) -> *mut c_char { let ctxt: &mut C = &mut *(ctxt as *mut C); - let result = ctxt.get_data(&CStr::from_ptr(key).to_string_lossy()); - BnString::into_raw(BnString::new(result)) + match ctxt.get_data(&CStr::from_ptr(key).to_string_lossy()) { + Some(result) => BnString::into_raw(BnString::new(result)), + None => std::ptr::null_mut(), + } } unsafe extern "C" fn cb_store_data<C: SecretsProvider>( diff --git a/rust/tests/secrets_provider.rs b/rust/tests/secrets_provider.rs index 6ea59773..aaa73fa9 100644 --- a/rust/tests/secrets_provider.rs +++ b/rust/tests/secrets_provider.rs @@ -17,8 +17,12 @@ impl SecretsProvider for MySecretsProvider { key == "my_key" } - fn get_data(&mut self, key: &str) -> String { - if key == "my_key" { "my_value" } else { "" }.to_string() + fn get_data(&mut self, key: &str) -> Option<String> { + if key == "my_key" { + Some("my_value".to_string()) + } else { + None + } } fn store_data(&mut self, _key: &str, _data: &str) -> bool { |
