add custom getter and setter functions
This commit is contained in:
54
tests/get_set.rs
Normal file
54
tests/get_set.rs
Normal file
@ -0,0 +1,54 @@
|
||||
use std::{cell::Cell, str::from_utf8};
|
||||
|
||||
use macroconf::config;
|
||||
use miniconf::JsonCoreSlash;
|
||||
|
||||
fn set_cell<const MIN: i32, const MAX: i32>(
|
||||
cell: &Cell<i32>,
|
||||
val: i32,
|
||||
) -> Result<(), &'static str> {
|
||||
if (MIN..=MAX).contains(&val) {
|
||||
cell.set(val);
|
||||
Ok(())
|
||||
} else {
|
||||
Err("value out of bounds")
|
||||
}
|
||||
}
|
||||
|
||||
#[config]
|
||||
struct Config {
|
||||
#[config(
|
||||
min = "-128",
|
||||
max = "128",
|
||||
default,
|
||||
typ = "i32",
|
||||
get = "Cell::get",
|
||||
set = "set_cell::<-128,128>"
|
||||
)]
|
||||
field: Cell<i32>,
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn get() {
|
||||
let mut buffer = [0u8; 32];
|
||||
let config = Config {
|
||||
field: __ConfigField::new(Cell::new(42)),
|
||||
};
|
||||
let len = config.get_json("/field", &mut buffer).unwrap();
|
||||
assert_eq!(from_utf8(&buffer[..len]), Ok("42"));
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn set() {
|
||||
let mut config = Config {
|
||||
field: __ConfigField::new(Cell::new(42)),
|
||||
};
|
||||
config.set_json("/field", b"-32").unwrap();
|
||||
assert_eq!(config.field.get(), -32);
|
||||
config
|
||||
.set_json("/field", b"256")
|
||||
.expect_err("result not checked");
|
||||
config
|
||||
.set_json("/field", b"-256")
|
||||
.expect_err("result not checked");
|
||||
}
|
Reference in New Issue
Block a user