whyno-core 0.5.0

Permission check pipeline, fix engine, and state types
Documentation
use super::*;

// is_metadata — true for all new metadata variants
#[test]
fn is_metadata_true_for_chmod() {
    assert!(Operation::Chmod.is_metadata());
}
#[test]
fn is_metadata_true_for_chown_uid() {
    assert!(Operation::ChownUid.is_metadata());
}
#[test]
fn is_metadata_true_for_chown_gid() {
    assert!(Operation::ChownGid.is_metadata());
}
#[test]
fn is_metadata_true_for_setxattr_user() {
    assert!(Operation::SetXattr {
        namespace: XattrNamespace::User
    }
    .is_metadata());
}
#[test]
fn is_metadata_true_for_setxattr_trusted() {
    assert!(Operation::SetXattr {
        namespace: XattrNamespace::Trusted
    }
    .is_metadata());
}
#[test]
fn is_metadata_true_for_setxattr_security() {
    assert!(Operation::SetXattr {
        namespace: XattrNamespace::Security
    }
    .is_metadata());
}
#[test]
fn is_metadata_true_for_setxattr_system_posix_acl() {
    assert!(Operation::SetXattr {
        namespace: XattrNamespace::SystemPosixAcl
    }
    .is_metadata());
}

// is_metadata — false for all existing variants
#[test]
fn is_metadata_false_for_read() {
    assert!(!Operation::Read.is_metadata());
}
#[test]
fn is_metadata_false_for_write() {
    assert!(!Operation::Write.is_metadata());
}
#[test]
fn is_metadata_false_for_execute() {
    assert!(!Operation::Execute.is_metadata());
}
#[test]
fn is_metadata_false_for_delete() {
    assert!(!Operation::Delete.is_metadata());
}
#[test]
fn is_metadata_false_for_create() {
    assert!(!Operation::Create.is_metadata());
}
#[test]
fn is_metadata_false_for_stat() {
    assert!(!Operation::Stat.is_metadata());
}

// checks_parent unaffected by new variants
#[test]
fn checks_parent_false_for_chmod() {
    assert!(!Operation::Chmod.checks_parent());
}
#[test]
fn checks_parent_false_for_chown_uid() {
    assert!(!Operation::ChownUid.checks_parent());
}
#[test]
fn checks_parent_false_for_chown_gid() {
    assert!(!Operation::ChownGid.checks_parent());
}
#[test]
fn checks_parent_false_for_setxattr() {
    assert!(!Operation::SetXattr {
        namespace: XattrNamespace::User
    }
    .checks_parent());
}

// MetadataParams
#[test]
fn metadata_params_all_none_by_default() {
    let p = MetadataParams::default();
    assert!(p.new_mode.is_none());
    assert!(p.new_uid.is_none());
    assert!(p.new_gid.is_none());
}

// XattrNamespace is Copy
#[test]
fn xattr_namespace_is_copy() {
    let ns = XattrNamespace::User;
    // Using ns twice proves Copy — would fail to compile if not Copy.
    assert_eq!(ns, ns);
}