summaryrefslogtreecommitdiff
path: root/profcollectd/libprofcollectd/bindings/libflags/lib.rs
diff options
context:
space:
mode:
authorYi Kong <yikong@google.com>2021-02-01 20:25:31 +0800
committerYi Kong <yikong@google.com>2021-02-08 18:30:47 +0000
commitb115d5f8044b221616dc4ad5e099f72b9f5f0f1d (patch)
treec5c61d02b22ba427552c27086981d892bad5a986 /profcollectd/libprofcollectd/bindings/libflags/lib.rs
parentb2456d60df6d9b2e5427bcc30d0ffecdaf4f37b1 (diff)
downloadextras-b115d5f8044b221616dc4ad5e099f72b9f5f0f1d.tar.gz
profcollectd: Rust bindings for libflags
To be used by complete Rust rewrite of profcollect. Test: rustc Bug: 163175424 Change-Id: I14f82030bfc5dc9c7790cbe5f1d5d65130a05a19
Diffstat (limited to 'profcollectd/libprofcollectd/bindings/libflags/lib.rs')
-rw-r--r--profcollectd/libprofcollectd/bindings/libflags/lib.rs43
1 files changed, 43 insertions, 0 deletions
diff --git a/profcollectd/libprofcollectd/bindings/libflags/lib.rs b/profcollectd/libprofcollectd/bindings/libflags/lib.rs
new file mode 100644
index 00000000..c8875cb1
--- /dev/null
+++ b/profcollectd/libprofcollectd/bindings/libflags/lib.rs
@@ -0,0 +1,43 @@
+//
+// Copyright (C) 2021 The Android Open Source Project
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+//
+
+//! This module implements safe wrappers for GetServerConfigurableFlag method
+//! from libflags.
+
+use std::ffi::{CStr, CString};
+
+/// Use the category name and flag name registered in SettingsToPropertiesMapper.java
+/// to query the experiment flag value. This method will return default_value if
+/// querying fails.
+/// Note that for flags from Settings.Global, experiment_category_name should
+/// always be global_settings.
+pub fn get_server_configurable_flag<'a>(
+ experiment_category_name: &str,
+ experiment_flag_name: &str,
+ default_value: &'a str,
+) -> &'a str {
+ let experiment_category_name = CString::new(experiment_category_name).unwrap();
+ let experiment_flag_name = CString::new(experiment_flag_name).unwrap();
+ let default_value = CString::new(default_value).unwrap();
+ unsafe {
+ let cstr = profcollect_libflags_bindgen::GetServerConfigurableFlag(
+ experiment_category_name.as_ptr(),
+ experiment_flag_name.as_ptr(),
+ default_value.as_ptr(),
+ );
+ CStr::from_ptr(cstr).to_str().unwrap()
+ }
+}