use std::path::PathBuf;
use std::sync::Arc;
use std::time::{Duration, SystemTime};
use crate::rules::{Anchor, Kind, MarkersRequired, Rule, Ruleset};
use crate::size::Size;
use crate::walk::{Claim, Hit, IgnoredClaim, IgnoredFileClaim, RuleClaim};
pub(crate) fn hit(path: &str, size: Size, seconds: u64) -> Hit {
let ruleset = Ruleset::builtin().expect("the built-in ruleset parses");
let rule = Arc::clone(&ruleset.rules()[0]);
Hit {
path: PathBuf::from(path),
claim: Claim::Rule(RuleClaim {
project_root: PathBuf::from("/scan"),
rule,
}),
size,
modified: Some(SystemTime::UNIX_EPOCH + Duration::from_secs(seconds)),
}
}
pub(crate) fn priced(path: &str, bytes: u64) -> Hit {
hit(path, Size::Measured(bytes), 0)
}
pub(crate) fn of_kind(path: &str, kind: Kind) -> Hit {
let mut made = hit(path, Size::Measured(1), 0);
made.claim = Claim::Rule(RuleClaim {
project_root: PathBuf::from("/scan"),
rule: Arc::new(Rule {
id: format!("test-{kind}"),
ecosystem: "Test".to_owned(),
kind,
markers: vec!["marker".to_owned()],
markers_required: MarkersRequired::Any,
targets: vec!["target".to_owned()],
anchor: Anchor::Parent,
note: None,
}),
});
made
}
pub(crate) fn gitignored(path: &str) -> Hit {
let mut made = hit(path, Size::Measured(1), 0);
made.claim = Claim::Ignored(IgnoredClaim {
work_tree: PathBuf::from("/scan"),
});
made
}
pub(crate) fn gitignored_file(path: &str, kind: Option<Kind>) -> Hit {
let mut made = hit(path, Size::Measured(1), 0);
made.claim = Claim::IgnoredFile(IgnoredFileClaim {
work_tree: PathBuf::from("/scan"),
kind,
});
made
}