mirror of
https://github.com/microsoft/regorus.git
synced 2026-08-05 02:16:11 +00:00
* `arc` feature to make engine usable from multiple threads. `arc` is turned on by default. When enabled, std::sync::Arc will be used instead of std::rc::Rc. The former makes regorus types like Engine, Value, ast nodes etc Send, allowing for usability from multiple threads. Arc would add a performance overhead though since the reference counting will now become atomic. Signed-off-by: Anand Krishnamoorthi <anakrish@microsoft.com> * Make engine and related types Debug Signed-off-by: Anand Krishnamoorthi <anakrish@microsoft.com> * Input, Data as json. Evaluate bool queries. Signed-off-by: Anand Krishnamoorthi <anakrish@microsoft.com> --------- Signed-off-by: Anand Krishnamoorthi <anakrish@microsoft.com>
34 lines
792 B
Rust
34 lines
792 B
Rust
// Copyright (c) Microsoft Corporation.
|
|
// Licensed under the MIT License.
|
|
|
|
use lazy_static::lazy_static;
|
|
use std::sync::Mutex;
|
|
|
|
use regorus::*;
|
|
|
|
// Ensure that types can be s
|
|
lazy_static! {
|
|
static ref VALUE: Value = Value::Null;
|
|
static ref ENGINE: Mutex<Engine> = Mutex::new(Engine::new());
|
|
// static ref ENGINE: Engine = Engine::new();
|
|
}
|
|
|
|
#[test]
|
|
fn shared_engine() -> anyhow::Result<()> {
|
|
let e_guard = ENGINE.lock();
|
|
let mut engine = e_guard.expect("failed to lock engine");
|
|
|
|
engine.add_policy(
|
|
"hello.rego".to_string(),
|
|
r#"
|
|
package test
|
|
allow = true
|
|
"#
|
|
.to_string(),
|
|
)?;
|
|
|
|
let results = engine.eval_query("data.test.allow".to_string(), false)?;
|
|
assert_eq!(results.result[0].expressions[0].value, Value::from(true));
|
|
Ok(())
|
|
}
|