use inspect_rs::{Inspect, InspectCx, Kind, Sensitivity};
#[derive(Inspect)]
struct SimpleStruct {
id: u32,
name: String,
}
#[test]
fn test_simple_struct() {
let value = SimpleStruct { id: 1, name: "test".to_string() };
let mut cx = InspectCx::new();
let inspected = value.inspect(&mut cx);
assert_eq!(inspected.kind(), &Kind::Struct);
assert_eq!(inspected.type_info().name(), "SimpleStruct");
let children = inspected.children().unwrap();
assert_eq!(children.len(), 2);
}
#[derive(Inspect)]
struct TupleStruct(u32, String);
#[test]
fn test_tuple_struct() {
let value = TupleStruct(42, "hello".to_string());
let mut cx = InspectCx::new();
let inspected = value.inspect(&mut cx);
assert_eq!(inspected.kind(), &Kind::TupleStruct);
assert_eq!(inspected.children().unwrap().len(), 2);
}
#[derive(Inspect)]
struct WithSecret {
public: String,
#[inspect(secret)]
secret: String,
}
#[test]
fn test_secret_field() {
let value = WithSecret { public: "visible".to_string(), secret: "hidden".to_string() };
let mut cx = InspectCx::new();
let inspected = value.inspect(&mut cx);
let inspect_core::Children::Direct(fields) = inspected.children().unwrap();
assert_eq!(fields[0].0.sensitivity(), Sensitivity::Normal);
assert_eq!(fields[1].0.sensitivity(), Sensitivity::Secret);
}
#[derive(Inspect)]
struct WithSensitive {
#[inspect(sensitive)]
email: String,
}
#[test]
fn test_sensitive_field() {
let value = WithSensitive { email: "user@example.com".to_string() };
let mut cx = InspectCx::new();
let inspected = value.inspect(&mut cx);
let inspect_core::Children::Direct(fields) = inspected.children().unwrap();
assert_eq!(fields[0].0.sensitivity(), Sensitivity::Sensitive);
}
#[derive(Inspect)]
struct WithSkip {
visible: u32,
#[inspect(skip)]
#[allow(dead_code)]
hidden: u32,
}
#[test]
fn test_skip_field() {
let value = WithSkip { visible: 1, hidden: 2 };
let mut cx = InspectCx::new();
let inspected = value.inspect(&mut cx);
assert_eq!(inspected.children().unwrap().len(), 1);
}