use crate::state::{
CacheBehaviour, CacheValueType, CachedEntry, Organization, Project,
ProjectV3, SearchResults, SearchResultsV3, TeamMember, User, Version,
};
macro_rules! impl_cache_methods {
($(($variant:ident, $type:ty)),*) => {
$(
paste::paste! {
#[tracing::instrument]
pub async fn [<get_ $variant:snake>](
id: &str,
cache_behaviour: Option<CacheBehaviour>,
) -> crate::Result<Option<$type>>
{
let state = crate::State::get().await?;
Ok(CachedEntry::[<get_ $variant:snake _many>](&[id], cache_behaviour, &state.pool, &state.api_semaphore).await?.into_iter().next())
}
pub async fn [<get_ $variant:snake _many>](
ids: &[&str],
) -> crate::Result<Vec<$type>>
let entries =
CachedEntry::[<get_ $variant:snake _many>](ids, None, &state.pool, &state.api_semaphore).await?;
Ok(entries)
)*
impl_cache_methods!(
(Project, Project),
(ProjectV3, ProjectV3),
(Version, Version),
(User, User),
(Team, Vec<TeamMember>),
(Organization, Organization),
(SearchResults, SearchResults),
(SearchResultsV3, SearchResultsV3)
);
pub async fn purge_cache_types(
cache_types: &[CacheValueType],
) -> crate::Result<()> {
CachedEntry::purge_cache_types(cache_types, &state.pool).await?;
Ok(())
/// Get versions for a project (without changelogs for fast loading).
/// Uses the cache system with the ProjectVersions cache type.
pub async fn get_project_versions(
project_id: &str,
) -> crate::Result<Option<Vec<Version>>> {
CachedEntry::get_project_versions(
project_id,
cache_behaviour,
&state.pool,
&state.api_semaphore,
)
.await