pub mod confluence;
pub mod jira;
use chrono::{DateTime, Utc};
use serde::{Deserialize, Serialize};
use std::collections::HashMap;
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct SyncCursor {
pub last_updated: DateTime<Utc>,
}
#[derive(Debug, Clone)]
pub struct SourceDocument {
pub id: String,
pub fields: HashMap<String, serde_json::Value>,
pub updated_at: DateTime<Utc>,
}
pub struct FetchResult {
pub documents: Vec<SourceDocument>,
pub cursor: SyncCursor,
pub has_more: bool,
}
#[trait_variant::make(Send)]
pub trait SourceConnector: Sync {
fn source_type(&self) -> &str;
fn source_name(&self) -> &str;
fn index_name(&self) -> &str;
async fn fetch_changes(
&self,
cursor: Option<&SyncCursor>,
batch_size: usize,
) -> anyhow::Result<FetchResult>;
async fn fetch_all_ids(&self) -> anyhow::Result<Vec<String>>;
}