#[doc(hidden)]
pub mod app;
#[doc(hidden)]
pub mod cli;
mod domain;
pub(crate) mod infra;
pub use domain::RustRelease;
pub use infra::fetcher::{create_fetcher, ReleaseFetcher};
pub use infra::Config;
pub use infra::Db;
use anyhow::Result;
pub struct HistVer {
config: Config,
db: Db,
}
impl HistVer {
pub fn new(config: Config) -> Result<Self> {
let db = Db::open(&config)?;
Ok(Self { config, db })
}
pub async fn fetch_releases(
&self,
channel: &str,
full: bool,
days: u32,
) -> Result<Vec<RustRelease>> {
let fetcher = infra::fetcher::create_fetcher(channel, full, days)?;
fetcher.fetch(&self.config).await
}
pub fn store_releases(&self, releases: &[RustRelease]) -> Result<u64> {
self.db.upsert_all(releases)
}
pub fn list_releases(&self, channel: Option<&str>) -> Result<Vec<RustRelease>> {
self.db.list_all(channel)
}
pub fn search_releases(
&self,
keyword: &str,
channel: Option<&str>,
) -> Result<Vec<RustRelease>> {
self.db.search(keyword, channel)
}
pub fn count_releases(&self, channel: Option<&str>) -> Result<u64> {
self.db.count(channel)
}
}