Refactor: Extract new crate binstalk-types plus other misc refactor and optimization (#535)

* Refactor: Extract new crate binstalk-types
* Optimize: Rm field `CrateInfo::other`
   which also removes dep serde-tuple-vec-map and serde-json from
   binstalk-types.
   
   This also makes `CrateInfo` easier to use, more generic and can be used
   over any `Serializer`, not just `serde_json::Value`.
* Mark all errors in `binstalk-manifests` as non_exhaustive
* Reduce size of `CvsParseError` by using `Box<str>`
   instead of `String` for variant `UnknownSourceType`.
* Reduce size of `CratesTomlParseError` to 16 bytes on 64bit platform
   by boxing variants `TomlWrite` and `CvsParse` as these two fields are
   significantly larger than other variants.
* Unify import style in mod `binstall_crates_v1`
* Replace dep binstalk-manifests with binstalk-types in binstalk-downloader
   to reduce its transitive dependencies and enables binstalk-downloader to
   be built in parallel to binstak-manifests.
* Replace dep binstalk-manifests with binstalk-types in binstalk
   to reduce transitive dependencies and enables binstalk to be built in
   parallel to binstalk-manifests.
   
   This is benefitial because binstalk-manifests pulls in toml_edit, which
   could takes up to 15s to be built on M1 (7-9s for codegen).
* Add dep binstalk-manifests to crates/bin
* Update dependabot and GHA release-pr

Signed-off-by: Jiahao XU <Jiahao_XU@outlook.com>
This commit is contained in:
Jiahao XU 2022-11-17 11:46:27 +11:00 committed by GitHub
parent 58326a6085
commit d9cc3ce219
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
24 changed files with 372 additions and 76 deletions

View file

@ -1,5 +1,6 @@
use std::{borrow::Cow, fmt, str::FromStr};
use binstalk_types::crate_info::cratesio_url;
use compact_str::CompactString;
use miette::Diagnostic;
use semver::Version;
@ -7,10 +8,7 @@ use serde::{Deserialize, Deserializer, Serialize, Serializer};
use thiserror::Error;
use url::Url;
use crate::{
crate_info::{CrateInfo, CrateSource, SourceType},
helpers::cratesio_url,
};
use crate::crate_info::{CrateInfo, CrateSource, SourceType};
#[derive(Clone, Debug, Ord, PartialOrd, Eq, PartialEq)]
pub struct CrateVersionSource {
@ -72,8 +70,8 @@ impl FromStr for CrateVersionSource {
["registry", url] => Source::Registry(Url::parse(url)?),
[kind, arg] => {
return Err(CvsParseError::UnknownSourceType {
kind: kind.to_string(),
arg: arg.to_string(),
kind: kind.to_string().into_boxed_str(),
arg: arg.to_string().into_boxed_str(),
})
}
_ => return Err(CvsParseError::BadSource),
@ -90,6 +88,7 @@ impl FromStr for CrateVersionSource {
}
#[derive(Debug, Diagnostic, Error)]
#[non_exhaustive]
pub enum CvsParseError {
#[error(transparent)]
UrlParse(#[from] url::ParseError),
@ -98,7 +97,7 @@ pub enum CvsParseError {
VersionParse(#[from] semver::Error),
#[error("unknown source type {kind}+{arg}")]
UnknownSourceType { kind: String, arg: String },
UnknownSourceType { kind: Box<str>, arg: Box<str> },
#[error("bad source format")]
BadSource,