From 172af54cd8ae0e39df978eb780aafbb0ceb0613d Mon Sep 17 00:00:00 2001 From: Jiahao XU Date: Tue, 26 Jul 2022 22:29:10 +1000 Subject: [PATCH] Impl `metafiles::binstall_v1::{Entry, Source}` Signed-off-by: Jiahao XU --- src/metafiles.rs | 2 + src/metafiles/binstall_v1.rs | 80 +++++++++++++++++++++++++++++------- 2 files changed, 68 insertions(+), 14 deletions(-) diff --git a/src/metafiles.rs b/src/metafiles.rs index 75ad0250..b8a2b4ee 100644 --- a/src/metafiles.rs +++ b/src/metafiles.rs @@ -2,3 +2,5 @@ mod cvs; pub use cvs::*; pub mod v1; + +pub mod binstall_v1; diff --git a/src/metafiles/binstall_v1.rs b/src/metafiles/binstall_v1.rs index e3f059f7..35e78ed8 100644 --- a/src/metafiles/binstall_v1.rs +++ b/src/metafiles/binstall_v1.rs @@ -1,15 +1,67 @@ -/* -{ - "name": "cargo-binstall", - "version_req": none, - "current_version": "0.10.0" - "source": { - "type": "Registry", - "url": "https://crates.io", - }, - "target": none, - "bins": [ - "cargo-binstall", - ], +use compact_str::CompactString; +use semver::Version; +use serde::{Deserialize, Serialize}; +use url::Url; + +use crate::binstall::MetaData; + +#[derive(Debug, Serialize, Deserialize)] +pub struct Entry { + pub name: CompactString, + pub version_req: CompactString, + pub current_version: Version, + pub source: Source, + pub target: CompactString, + pub bins: Vec, +} +impl Entry { + pub fn new(metadata: MetaData) -> Self { + let MetaData { + bins, + cvs: + super::CrateVersionSource { + name, + version, + source, + }, + version_req, + target, + } = metadata; + + Self { + name: name.into(), + version_req: version_req.into(), + current_version: version, + source: source.into(), + target: target.into(), + bins, + } + } +} + +#[derive(Debug, Serialize, Deserialize)] +pub struct Source { + source_type: CompactString, + url: Url, +} + +impl From for Source { + fn from(src: super::Source) -> Self { + use super::Source::*; + + match src { + Git(url) => Source { + source_type: "Git".into(), + url, + }, + Path(url) => Source { + source_type: "Path".into(), + url, + }, + Registry(url) => Source { + source_type: "Registry".into(), + url, + }, + } + } } - */