summaryrefslogtreecommitdiff
path: root/rust
diff options
context:
space:
mode:
authorMason Reed <mason@vector35.com>2025-09-27 17:40:15 -0400
committerMason Reed <mason@vector35.com>2025-10-22 00:36:24 -0400
commit1d554b5af1b43ced740725c1812949af1447b7ea (patch)
tree2e52f4200e186bea1f82582bcfc6f650baa26155 /rust
parent31ec051fd683d3747f10a0981b497d90f08d25a3 (diff)
[Rust] Fix custom `SecretsProvider` impl requiring data to be passed back in `get_data`
We want to provide no value in the case of the key not having an associated value
Diffstat (limited to 'rust')
-rw-r--r--rust/src/secrets_provider.rs8
-rw-r--r--rust/tests/secrets_provider.rs8
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 {