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