pub mod agent_files;
pub(crate) mod common;
pub mod github;
pub mod gitlab;
pub mod provider;
pub struct ImportProgress {
pub prs_fetched: usize,
pub prs_total: usize,
pub comments_imported: usize,
pub comments_skipped: usize,
pub prs_missing: usize,
pub missing_pr_numbers: Vec<i32>,
}
pub type ProgressCallback = Box<dyn Fn(&ImportProgress) + Send>;
pub(crate) fn validate_since_date(since: &str) -> crate::Result<()> {
chrono::NaiveDate::parse_from_str(since, "%Y-%m-%d")
.map(|_| ())
.map_err(|_| {
crate::error::CoreError::Internal(format!(
"invalid --since date {since:?}: expected YYYY-MM-DD"
))
})
}
#[cfg(test)]
mod tests {
use super::validate_since_date;
#[test]
fn since_date_accepts_only_iso_calendar_dates() {
assert!(validate_since_date("2026-01-15").is_ok());
assert!(validate_since_date("2026-02-30").is_err());
assert!(validate_since_date("2026-01-15 sort:updated-desc").is_err());
assert!(validate_since_date("2026-01-15T00:00:00Z").is_err());
}
}