mirror of https://github.com/OISF/suricata
feature: provide a Rust binding to the feature API
As the feature module is not available for Rust unit tests, a mock version is also provided.pull/10076/head
parent
1afb485dfa
commit
15ed51f9b8
@ -0,0 +1,60 @@
|
||||
/* Copyright (C) 2023 Open Information Security Foundation
|
||||
*
|
||||
* You can copy, redistribute or modify this Program under the terms of
|
||||
* the GNU General Public License version 2 as published by the Free
|
||||
* Software Foundation.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* version 2 along with this program; if not, write to the Free Software
|
||||
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
|
||||
* 02110-1301, USA.
|
||||
*/
|
||||
|
||||
//! Rust bindings to the "feature" API.
|
||||
//!
|
||||
//! As this feature module is a binding to a Suricata C module it is
|
||||
//! not available to Rust unit tests. Instead when running Rust unit
|
||||
//! tests and "mock" version is provided that will return true for any
|
||||
//! feature starting with "true" and false for any other feature name.
|
||||
|
||||
#[cfg(test)]
|
||||
mod mock {
|
||||
/// Check for a feature returning true if found.
|
||||
///
|
||||
/// This a "mock" variant of `requires` that will return true for
|
||||
/// any feature starting with string `true`, and false for
|
||||
/// anything else.
|
||||
pub fn requires(feature: &str) -> bool {
|
||||
return feature.starts_with("true");
|
||||
}
|
||||
}
|
||||
|
||||
#[cfg(not(test))]
|
||||
mod real {
|
||||
use std::ffi::CString;
|
||||
use std::os::raw::c_char;
|
||||
|
||||
extern "C" {
|
||||
fn RequiresFeature(feature: *const c_char) -> bool;
|
||||
}
|
||||
|
||||
/// Check for a feature returning true if found.
|
||||
pub fn requires(feature: &str) -> bool {
|
||||
if let Ok(feature) = CString::new(feature) {
|
||||
unsafe { RequiresFeature(feature.as_ptr()) }
|
||||
} else {
|
||||
false
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
#[cfg(not(test))]
|
||||
pub use real::*;
|
||||
|
||||
#[cfg(test)]
|
||||
pub use mock::*;
|
Loading…
Reference in New Issue