pesde/registry/src/endpoints/package_versions.rs

39 lines
1.3 KiB
Rust
Raw Normal View History

2024-07-30 11:37:54 +01:00
use actix_web::{web, HttpResponse, Responder};
2024-08-13 19:14:41 +01:00
use std::collections::BTreeSet;
2024-07-30 11:37:54 +01:00
use crate::{error::Error, package::PackageResponse, AppState};
2024-08-08 16:59:59 +01:00
use pesde::{
names::PackageName,
source::{git_index::GitBasedSource, pesde::IndexFile},
};
2024-07-30 11:37:54 +01:00
pub async fn get_package_versions(
app_state: web::Data<AppState>,
path: web::Path<PackageName>,
) -> Result<impl Responder, Error> {
let name = path.into_inner();
let (scope, name_part) = name.as_str();
let source = app_state.source.lock().unwrap();
2024-08-11 15:16:25 +01:00
let versions: IndexFile =
match source.read_file([scope, name_part], &app_state.project, None)? {
Some(versions) => toml::de::from_str(&versions)?,
None => return Ok(HttpResponse::NotFound().finish()),
};
2024-07-30 11:37:54 +01:00
Ok(HttpResponse::Ok().json(
versions
.into_iter()
.map(|(v_id, entry)| PackageResponse {
name: name.to_string(),
version: v_id.version().to_string(),
2024-08-13 19:14:41 +01:00
targets: BTreeSet::from([entry.target.into()]),
2024-07-30 11:37:54 +01:00
description: entry.description.unwrap_or_default(),
published_at: entry.published_at,
license: entry.license.unwrap_or_default(),
})
.collect::<Vec<_>>(),
))
}