Deleted "extra workspace member" functionality from crate_universe (#1406)
* Deleted "extra workspace member" functionality from crate_universe
* Regenerate documentation
diff --git a/.bazelci/presubmit.yml b/.bazelci/presubmit.yml
index 32e2ecd..c441c65 100644
--- a/.bazelci/presubmit.yml
+++ b/.bazelci/presubmit.yml
@@ -333,7 +333,6 @@
# failing. This is likely an issue with the windows workers in CI.
- "-//vendor_local_pkgs/..."
- "-//vendor_remote_pkgs/..."
- - "-//extra_workspace_members/..."
- "-//no_cargo_manifests/..."
test_targets:
- "//..."
@@ -341,7 +340,6 @@
# failing. This is likely an issue with the windows workers in CI.
- "-//vendor_local_pkgs/..."
- "-//vendor_remote_pkgs/..."
- - "-//extra_workspace_members/..."
- "-//no_cargo_manifests/..."
buildifier:
version: latest
diff --git a/crate_universe/private/crates_repository.bzl b/crate_universe/private/crates_repository.bzl
index 70f7045..d7305d7 100644
--- a/crate_universe/private/crates_repository.bzl
+++ b/crate_universe/private/crates_repository.bzl
@@ -175,18 +175,6 @@
"cargo_config": attr.label(
doc = "A [Cargo configuration](https://doc.rust-lang.org/cargo/reference/config.html) file",
),
- "extra_workspace_member_url_template": attr.string(
- doc = "The registry url to use when fetching extra workspace members",
- default = "https://crates.io/api/v1/crates/{name}/{version}/download",
- ),
- "extra_workspace_members": attr.string_dict(
- doc = (
- "Additional crates to download and include as a workspace member. This is unfortunately required in " +
- "order to add information about \"binary-only\" crates so that a `rust_binary` may be generated for " +
- "it. [rust-lang/cargo#9096](https://github.com/rust-lang/cargo/issues/9096) tracks an RFC which may " +
- "solve for this."
- ),
- ),
"generate_build_scripts": attr.bool(
doc = (
"Whether or not to generate " +
diff --git a/crate_universe/private/crates_vendor.bzl b/crate_universe/private/crates_vendor.bzl
index 23c4c6c..1af22a8 100644
--- a/crate_universe/private/crates_vendor.bzl
+++ b/crate_universe/private/crates_vendor.bzl
@@ -120,20 +120,6 @@
runfiles = [manifest] + ctx.files.manifests + ([ctx.file.cargo_config] if ctx.attr.cargo_config else [])
return args, runfiles
-def _write_extra_manifests_manifest(ctx):
- manifest = _write_data_file(
- ctx = ctx,
- name = "cargo-bazel-extra-manifests-manifest.json",
- data = json.encode(struct(
- # TODO: This is for extra workspace members
- manifests = [],
- )),
- )
- is_windows = _is_windows(ctx)
- args = ["--extra-manifests-manifest", _runfiles_path(manifest.short_path, is_windows)]
- runfiles = [manifest]
- return args, runfiles
-
def _write_config_file(ctx):
rendering_config = dict(json.decode(render_config()))
@@ -219,11 +205,6 @@
args.extend(splicing_manifest_args)
cargo_bazel_runfiles.extend(splicing_manifest_runfiles)
- # Generate extra-manifests manifest
- extra_manifests_manifest_args, extra_manifests_manifest_runfiles = _write_extra_manifests_manifest(ctx)
- args.extend(extra_manifests_manifest_args)
- cargo_bazel_runfiles.extend(extra_manifests_manifest_runfiles)
-
# Optionally include buildifier
if ctx.attr.buildifier:
args.extend(["--buildifier", _runfiles_path(ctx.executable.buildifier.short_path, is_windows)])
diff --git a/crate_universe/private/splicing_utils.bzl b/crate_universe/private/splicing_utils.bzl
index 7132f2c..6bdd473 100644
--- a/crate_universe/private/splicing_utils.bzl
+++ b/crate_universe/private/splicing_utils.bzl
@@ -21,63 +21,6 @@
resolver_version = resolver_version,
))
-def download_extra_workspace_members(repository_ctx, cache_dir, render_template_registry_url):
- """Download additional workspace members for use in splicing.
-
- Args:
- repository_ctx (repository_ctx): The rule's context object.
- cache_dir (path): A directory in which to download and extract extra workspace members
- render_template_registry_url (str): The base template to use for determining the crate's registry URL.
-
- Returns:
- list: A list of information related to the downloaded crates
- - manifest: The path of the manifest.
- - url: The url the manifest came from.
- - sha256: The sha256 checksum of the new manifest.
- """
- manifests = []
- extra_workspace_members = repository_ctx.attr.extra_workspace_members
- if extra_workspace_members:
- repository_ctx.report_progress("Downloading extra workspace members.")
-
- for name, spec in repository_ctx.attr.extra_workspace_members.items():
- spec = struct(**json.decode(spec))
-
- url = render_template_registry_url
- url = url.replace("{name}", name)
- url = url.replace("{version}", spec.version)
-
- if spec.sha256:
- result = repository_ctx.download_and_extract(
- output = cache_dir,
- url = url,
- sha256 = spec.sha256,
- type = "tar.gz",
- )
- else:
- result = repository_ctx.download_and_extract(
- output = cache_dir,
- url = url,
- type = "tar.gz",
- )
-
- manifest = repository_ctx.path("{}/{}-{}/Cargo.toml".format(
- cache_dir,
- name,
- spec.version,
- ))
-
- if not manifest.exists:
- fail("Extra workspace member '{}' has no root Cargo.toml file".format(name))
-
- manifests.append(struct(
- manifest = str(manifest),
- url = url,
- sha256 = result.sha256,
- ))
-
- return manifests
-
def kebab_case_keys(data):
"""Ensure the key value of the data given are kebab-case
@@ -183,22 +126,6 @@
repository_ctx.report_progress("Splicing Cargo workspace.")
repo_dir = repository_ctx.path(".")
- # Download extra workspace members
- crates_cache_dir = repository_ctx.path("{}/.crates_cache".format(repo_dir))
- extra_manifest_info = download_extra_workspace_members(
- repository_ctx = repository_ctx,
- cache_dir = crates_cache_dir,
- render_template_registry_url = repository_ctx.attr.extra_workspace_member_url_template,
- )
-
- extra_manifests_manifest = repository_ctx.path("{}/extra_manifests_manifest.json".format(repo_dir))
- repository_ctx.file(
- extra_manifests_manifest,
- json.encode_indent(struct(
- manifests = extra_manifest_info,
- ), indent = " " * 4),
- )
-
splicing_output_dir = repository_ctx.path("splicing-output")
# Generate a workspace root which contains all workspace members
@@ -209,8 +136,6 @@
splicing_output_dir,
"--splicing-manifest",
splicing_manifest,
- "--extra-manifests-manifest",
- extra_manifests_manifest,
"--cargo",
cargo,
"--rustc",
diff --git a/crate_universe/src/cli/splice.rs b/crate_universe/src/cli/splice.rs
index e8e72ee..22f605c 100644
--- a/crate_universe/src/cli/splice.rs
+++ b/crate_universe/src/cli/splice.rs
@@ -7,9 +7,7 @@
use crate::cli::Result;
use crate::metadata::{write_metadata, Generator, MetadataGenerator};
-use crate::splicing::{
- generate_lockfile, ExtraManifestsManifest, Splicer, SplicingManifest, WorkspaceMetadata,
-};
+use crate::splicing::{generate_lockfile, Splicer, SplicingManifest, WorkspaceMetadata};
/// Command line options for the `splice` subcommand
#[derive(Parser, Debug)]
@@ -19,10 +17,6 @@
#[clap(long)]
pub splicing_manifest: PathBuf,
- /// A generated manifest of "extra workspace members"
- #[clap(long)]
- pub extra_manifests_manifest: PathBuf,
-
/// A Cargo lockfile (Cargo.lock).
#[clap(long)]
pub cargo_lockfile: Option<PathBuf>,
@@ -57,8 +51,6 @@
pub fn splice(opt: SpliceOptions) -> Result<()> {
// Load the all config files required for splicing a workspace
let splicing_manifest = SplicingManifest::try_from_path(&opt.splicing_manifest)?;
- let extra_manifests_manifest =
- ExtraManifestsManifest::try_from_path(opt.extra_manifests_manifest)?;
// Determine the splicing workspace
let temp_dir;
@@ -71,7 +63,7 @@
};
// Generate a splicer for creating a Cargo workspace manifest
- let splicer = Splicer::new(splicing_dir, splicing_manifest, extra_manifests_manifest)?;
+ let splicer = Splicer::new(splicing_dir, splicing_manifest)?;
// Splice together the manifest
let manifest_path = splicer.splice_workspace()?;
diff --git a/crate_universe/src/cli/vendor.rs b/crate_universe/src/cli/vendor.rs
index 3e31cfe..bf2ee09 100644
--- a/crate_universe/src/cli/vendor.rs
+++ b/crate_universe/src/cli/vendor.rs
@@ -14,9 +14,7 @@
use crate::metadata::{Annotations, VendorGenerator};
use crate::metadata::{Generator, MetadataGenerator};
use crate::rendering::{render_module_label, write_outputs, Renderer};
-use crate::splicing::{
- generate_lockfile, ExtraManifestsManifest, Splicer, SplicingManifest, WorkspaceMetadata,
-};
+use crate::splicing::{generate_lockfile, Splicer, SplicingManifest, WorkspaceMetadata};
/// Command line options for the `vendor` subcommand
#[derive(Parser, Debug)]
@@ -55,10 +53,6 @@
#[clap(long)]
pub metadata: Option<PathBuf>,
- /// A generated manifest of "extra workspace members"
- #[clap(long)]
- pub extra_manifests_manifest: PathBuf,
-
/// The path to a bazel binary
#[clap(long, env = "BAZEL_REAL", default_value = "bazel")]
pub bazel: PathBuf,
@@ -117,18 +111,12 @@
// Load the all config files required for splicing a workspace
let splicing_manifest = SplicingManifest::try_from_path(&opt.splicing_manifest)?
.resolve(&opt.workspace_dir, &output_base);
- let extra_manifests_manifest =
- ExtraManifestsManifest::try_from_path(opt.extra_manifests_manifest)?.absolutize();
let temp_dir = tempfile::tempdir().context("Failed to create temporary directory")?;
// Generate a splicer for creating a Cargo workspace manifest
- let splicer = Splicer::new(
- PathBuf::from(temp_dir.as_ref()),
- splicing_manifest,
- extra_manifests_manifest,
- )
- .context("Failed to create splicer")?;
+ let splicer = Splicer::new(PathBuf::from(temp_dir.as_ref()), splicing_manifest)
+ .context("Failed to create splicer")?;
// Splice together the manifest
let manifest_path = splicer
diff --git a/crate_universe/src/splicing.rs b/crate_universe/src/splicing.rs
index cb7d698..df10b8e 100644
--- a/crate_universe/src/splicing.rs
+++ b/crate_universe/src/splicing.rs
@@ -21,20 +21,9 @@
use self::cargo_config::CargoConfig;
pub use self::splicer::*;
-#[derive(Debug, Default, Serialize, Deserialize)]
-pub struct ExtraManifestInfo {
- // The path to a Cargo Manifest
- pub manifest: PathBuf,
-
- // The URL where the manifest's package can be downloaded
- pub url: String,
-
- // The Sha256 checksum of the downloaded package located at `url`.
- pub sha256: String,
-}
-
type DirectPackageManifest = BTreeMap<String, cargo_toml::DependencyDetail>;
+/// A collection of information used for splicing together a new Cargo manifest.
#[derive(Debug, Default, Serialize, Deserialize, Clone)]
#[serde(deny_unknown_fields)]
pub struct SplicingManifest {
@@ -104,6 +93,7 @@
}
}
+/// The result of fully resolving a [SplicingManifest] in preparation for splicing.
#[derive(Debug, Serialize, Default)]
pub struct SplicingMetadata {
/// A set of all packages directly written to the rule
@@ -149,32 +139,6 @@
}
}
-/// A collection of information required for reproducible "extra worksspace members".
-#[derive(Debug, Default, Serialize, Deserialize)]
-#[serde(deny_unknown_fields)]
-pub struct ExtraManifestsManifest {
- pub manifests: Vec<ExtraManifestInfo>,
-}
-
-impl FromStr for ExtraManifestsManifest {
- type Err = serde_json::Error;
-
- fn from_str(s: &str) -> Result<Self, Self::Err> {
- serde_json::from_str(s)
- }
-}
-
-impl ExtraManifestsManifest {
- pub fn try_from_path<T: AsRef<Path>>(path: T) -> Result<Self> {
- let content = fs::read_to_string(path.as_ref())?;
- Self::from_str(&content).context("Failed to load ExtraManifestsManifest")
- }
-
- pub fn absolutize(self) -> Self {
- self
- }
-}
-
#[derive(Debug, Default, Serialize, Deserialize, Clone)]
pub struct SourceInfo {
/// A url where to a `.crate` file.
@@ -229,30 +193,9 @@
impl WorkspaceMetadata {
fn new(
splicing_manifest: &SplicingManifest,
- extra_manifests_manifest: &ExtraManifestsManifest,
- injected_manifests: HashMap<&PathBuf, String>,
+ member_manifests: HashMap<&PathBuf, String>,
) -> Result<Self> {
- let mut sources = BTreeMap::new();
-
- for config in extra_manifests_manifest.manifests.iter() {
- let package = match read_manifest(&config.manifest) {
- Ok(manifest) => match manifest.package {
- Some(pkg) => pkg,
- None => continue,
- },
- Err(e) => return Err(e),
- };
-
- let id = CrateId::new(package.name, package.version);
- let info = SourceInfo {
- url: config.url.clone(),
- sha256: config.sha256.clone(),
- };
-
- sources.insert(id, info);
- }
-
- let mut package_prefixes: BTreeMap<String, String> = injected_manifests
+ let mut package_prefixes: BTreeMap<String, String> = member_manifests
.iter()
.filter_map(|(original_manifest, cargo_pkg_name)| {
let label = match splicing_manifest.manifests.get(*original_manifest) {
@@ -287,7 +230,7 @@
.collect();
Ok(Self {
- sources,
+ sources: BTreeMap::new(),
workspace_prefix,
package_prefixes,
})
diff --git a/crate_universe/src/splicing/splicer.rs b/crate_universe/src/splicing/splicer.rs
index 3555cb7..1a68d32 100644
--- a/crate_universe/src/splicing/splicer.rs
+++ b/crate_universe/src/splicing/splicer.rs
@@ -12,10 +12,7 @@
use crate::splicing::{SplicedManifest, SplicingManifest};
use crate::utils::starlark::Label;
-use super::{
- read_manifest, DirectPackageManifest, ExtraManifestInfo, ExtraManifestsManifest,
- WorkspaceMetadata,
-};
+use super::{read_manifest, DirectPackageManifest, WorkspaceMetadata};
/// The core splicer implementation. Each style of Bazel workspace should be represented
/// here and a splicing implementation defined.
@@ -25,7 +22,6 @@
path: &'a PathBuf,
manifest: &'a Manifest,
splicing_manifest: &'a SplicingManifest,
- extra_manifests_manifest: &'a ExtraManifestsManifest,
},
/// Splice a manifest for a single package. This includes cases where
/// were defined directly in Bazel.
@@ -33,13 +29,11 @@
path: &'a PathBuf,
manifest: &'a Manifest,
splicing_manifest: &'a SplicingManifest,
- extra_manifests_manifest: &'a ExtraManifestsManifest,
},
/// Splice a manifest from multiple disjoint Cargo manifests.
MultiPackage {
manifests: &'a HashMap<PathBuf, Manifest>,
splicing_manifest: &'a SplicingManifest,
- extra_manifests_manifest: &'a ExtraManifestsManifest,
},
}
@@ -50,7 +44,6 @@
pub fn new(
manifests: &'a HashMap<PathBuf, Manifest>,
splicing_manifest: &'a SplicingManifest,
- extra_manifests_manifest: &'a ExtraManifestsManifest,
) -> Result<Self> {
// First check for any workspaces in the provided manifests
let workspace_owned: HashMap<&PathBuf, &Manifest> = manifests
@@ -114,7 +107,6 @@
path,
manifest,
splicing_manifest,
- extra_manifests_manifest,
})
} else if manifests.len() == 1 {
let (path, manifest) = manifests.iter().last().unwrap();
@@ -122,13 +114,11 @@
path,
manifest,
splicing_manifest,
- extra_manifests_manifest,
})
} else {
Ok(Self::MultiPackage {
manifests,
splicing_manifest,
- extra_manifests_manifest,
})
}
}
@@ -177,76 +167,45 @@
path,
manifest,
splicing_manifest,
- extra_manifests_manifest,
- } => Self::splice_workspace(
- workspace_dir,
- path,
- manifest,
- splicing_manifest,
- extra_manifests_manifest,
- ),
+ } => Self::splice_workspace(workspace_dir, path, manifest, splicing_manifest),
SplicerKind::Package {
path,
manifest,
splicing_manifest,
- extra_manifests_manifest,
- } => Self::splice_package(
- workspace_dir,
- path,
- manifest,
- splicing_manifest,
- extra_manifests_manifest,
- ),
+ } => Self::splice_package(workspace_dir, path, manifest, splicing_manifest),
SplicerKind::MultiPackage {
manifests,
splicing_manifest,
- extra_manifests_manifest,
- } => Self::splice_multi_package(
- workspace_dir,
- manifests,
- splicing_manifest,
- extra_manifests_manifest,
- ),
+ } => Self::splice_multi_package(workspace_dir, manifests, splicing_manifest),
}
}
+ /// Implementation for splicing Cargo workspaces
fn splice_workspace(
workspace_dir: &Path,
path: &&PathBuf,
manifest: &&Manifest,
splicing_manifest: &&SplicingManifest,
- extra_manifests_manifest: &&ExtraManifestsManifest,
) -> Result<SplicedManifest> {
let mut manifest = (*manifest).clone();
let manifest_dir = path
.parent()
.expect("Every manifest should havee a parent directory");
- let extra_workspace_manifests =
- Self::get_extra_workspace_manifests(&extra_manifests_manifest.manifests)?;
-
// Link the sources of the root manifest into the new workspace
symlink_roots(manifest_dir, workspace_dir, Some(IGNORE_LIST))?;
// Optionally install the cargo config after contents have been symlinked
Self::setup_cargo_config(&splicing_manifest.cargo_config, workspace_dir)?;
- // Add additional workspace members to the new manifest
- let mut installations = Self::inject_workspace_members(
- &mut manifest,
- &extra_workspace_manifests,
- workspace_dir,
- )?;
-
// Add any additional depeendencies to the root package
Self::inject_direct_packages(&mut manifest, &splicing_manifest.direct_packages)?;
let root_manifest_path = workspace_dir.join("Cargo.toml");
- installations.insert(path, String::new());
+ let member_manifests = HashMap::from([(*path, String::new())]);
// Write the generated metadata to the manifest
- let workspace_metadata =
- WorkspaceMetadata::new(splicing_manifest, extra_manifests_manifest, installations)?;
+ let workspace_metadata = WorkspaceMetadata::new(splicing_manifest, member_manifests)?;
workspace_metadata.inject_into(&mut manifest)?;
// Write the root manifest
@@ -255,20 +214,17 @@
Ok(SplicedManifest::Workspace(root_manifest_path))
}
+ /// Implementation for splicing individual Cargo packages
fn splice_package(
workspace_dir: &Path,
path: &&PathBuf,
manifest: &&Manifest,
splicing_manifest: &&SplicingManifest,
- extra_manifests_manifest: &&ExtraManifestsManifest,
) -> Result<SplicedManifest> {
let manifest_dir = path
.parent()
.expect("Every manifest should havee a parent directory");
- let extra_workspace_manifests =
- Self::get_extra_workspace_manifests(&extra_manifests_manifest.manifests)?;
-
// Link the sources of the root manifest into the new workspace
symlink_roots(manifest_dir, workspace_dir, Some(IGNORE_LIST))?;
@@ -282,22 +238,14 @@
default_cargo_workspace_manifest(&splicing_manifest.resolver_version).workspace
}
- // Add additional workspace members to the new manifest
- let mut installations = Self::inject_workspace_members(
- &mut manifest,
- &extra_workspace_manifests,
- workspace_dir,
- )?;
-
// Add any additional depeendencies to the root package
Self::inject_direct_packages(&mut manifest, &splicing_manifest.direct_packages)?;
let root_manifest_path = workspace_dir.join("Cargo.toml");
- installations.insert(path, String::new());
+ let member_manifests = HashMap::from([(*path, String::new())]);
// Write the generated metadata to the manifest
- let workspace_metadata =
- WorkspaceMetadata::new(splicing_manifest, extra_manifests_manifest, installations)?;
+ let workspace_metadata = WorkspaceMetadata::new(splicing_manifest, member_manifests)?;
workspace_metadata.inject_into(&mut manifest)?;
// Write the root manifest
@@ -306,37 +254,22 @@
Ok(SplicedManifest::Package(root_manifest_path))
}
+ /// Implementation for splicing together multiple Cargo packages/workspaces
fn splice_multi_package(
workspace_dir: &Path,
manifests: &&HashMap<PathBuf, Manifest>,
splicing_manifest: &&SplicingManifest,
- extra_manifests_manifest: &&ExtraManifestsManifest,
) -> Result<SplicedManifest> {
let mut manifest = default_cargo_workspace_manifest(&splicing_manifest.resolver_version);
// Optionally install a cargo config file into the workspace root.
Self::setup_cargo_config(&splicing_manifest.cargo_config, workspace_dir)?;
- let extra_workspace_manifests =
- Self::get_extra_workspace_manifests(&extra_manifests_manifest.manifests)?;
-
- let manifests: HashMap<PathBuf, Manifest> = manifests
- .iter()
- .map(|(p, m)| (p.to_owned(), m.to_owned()))
- .collect();
-
- let all_manifests = manifests
- .iter()
- .chain(extra_workspace_manifests.iter())
- .map(|(k, v)| (k.clone(), v.clone()))
- .collect();
-
let installations =
- Self::inject_workspace_members(&mut manifest, &all_manifests, workspace_dir)?;
+ Self::inject_workspace_members(&mut manifest, manifests, workspace_dir)?;
// Write the generated metadata to the manifest
- let workspace_metadata =
- WorkspaceMetadata::new(splicing_manifest, extra_manifests_manifest, installations)?;
+ let workspace_metadata = WorkspaceMetadata::new(splicing_manifest, installations)?;
workspace_metadata.inject_into(&mut manifest)?;
// Add any additional depeendencies to the root package
@@ -349,20 +282,6 @@
Ok(SplicedManifest::MultiPackage(root_manifest_path))
}
- /// Extract the set of extra workspace member manifests such that it matches
- /// how other manifests are passed when creating a new [SplicerKind].
- fn get_extra_workspace_manifests(
- extra_manifests: &[ExtraManifestInfo],
- ) -> Result<HashMap<PathBuf, Manifest>> {
- extra_manifests
- .iter()
- .map(|config| match read_manifest(&config.manifest) {
- Ok(manifest) => Ok((config.manifest.clone(), manifest)),
- Err(err) => Err(err),
- })
- .collect()
- }
-
/// A helper for installing Cargo config files into the spliced workspace while also
/// ensuring no other linked config file is available
fn setup_cargo_config(cargo_config_path: &Option<PathBuf>, workspace_dir: &Path) -> Result<()> {
@@ -528,15 +447,10 @@
workspace_dir: PathBuf,
manifests: HashMap<PathBuf, Manifest>,
splicing_manifest: SplicingManifest,
- extra_manifests_manifest: ExtraManifestsManifest,
}
impl Splicer {
- pub fn new(
- workspace_dir: PathBuf,
- splicing_manifest: SplicingManifest,
- extra_manifests_manifest: ExtraManifestsManifest,
- ) -> Result<Self> {
+ pub fn new(workspace_dir: PathBuf, splicing_manifest: SplicingManifest) -> Result<Self> {
// Load all manifests
let manifests = splicing_manifest
.manifests
@@ -552,18 +466,12 @@
workspace_dir,
manifests,
splicing_manifest,
- extra_manifests_manifest,
})
}
/// Build a new workspace root
pub fn splice_workspace(&self) -> Result<SplicedManifest> {
- SplicerKind::new(
- &self.manifests,
- &self.splicing_manifest,
- &self.extra_manifests_manifest,
- )?
- .splice(&self.workspace_dir)
+ SplicerKind::new(&self.manifests, &self.splicing_manifest)?.splice(&self.workspace_dir)
}
}
@@ -769,7 +677,6 @@
use cargo_metadata::{MetadataCommand, PackageId};
use maplit::btreeset;
- use crate::splicing::ExtraManifestInfo;
use crate::utils::starlark::Label;
/// Clone and compare two items after calling `.sort()` on them.
@@ -858,23 +765,6 @@
manifest
}
- fn mock_extra_manifest_digest(cache_dir: &Path) -> ExtraManifestsManifest {
- ExtraManifestsManifest {
- manifests: vec![{
- let manifest_path = cache_dir.join("extra_pkg").join("Cargo.toml");
- mock_cargo_toml(&manifest_path, "extra_pkg");
-
- ExtraManifestInfo {
- manifest: manifest_path,
- url: "https://crates.io/".to_owned(),
- sha256: "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855"
- .to_owned(),
- }
- }],
- }
- }
-
- /// This json object is tightly coupled to [mock_extra_manifest_digest]
fn mock_workspace_metadata(
include_extra_member: bool,
workspace_prefix: Option<&str>,
@@ -1084,14 +974,11 @@
// Splice the workspace
let workspace_root = tempfile::tempdir().unwrap();
- let workspace_manifest = Splicer::new(
- workspace_root.as_ref().to_path_buf(),
- splicing_manifest,
- ExtraManifestsManifest::default(),
- )
- .unwrap()
- .splice_workspace()
- .unwrap();
+ let workspace_manifest =
+ Splicer::new(workspace_root.as_ref().to_path_buf(), splicing_manifest)
+ .unwrap()
+ .splice_workspace()
+ .unwrap();
// Ensure metadata is valid
let metadata = generate_metadata(workspace_manifest.as_path_buf());
@@ -1120,14 +1007,11 @@
// Splice the workspace
let workspace_root = tempfile::tempdir().unwrap();
- let workspace_manifest = Splicer::new(
- workspace_root.as_ref().to_path_buf(),
- splicing_manifest,
- ExtraManifestsManifest::default(),
- )
- .unwrap()
- .splice_workspace()
- .unwrap();
+ let workspace_manifest =
+ Splicer::new(workspace_root.as_ref().to_path_buf(), splicing_manifest)
+ .unwrap()
+ .splice_workspace()
+ .unwrap();
// Ensure metadata is valid
let metadata = generate_metadata(workspace_manifest.as_path_buf());
@@ -1162,13 +1046,10 @@
// Splice the workspace
let workspace_root = tempfile::tempdir().unwrap();
- let workspace_manifest = Splicer::new(
- workspace_root.as_ref().to_path_buf(),
- splicing_manifest,
- ExtraManifestsManifest::default(),
- )
- .unwrap()
- .splice_workspace();
+ let workspace_manifest =
+ Splicer::new(workspace_root.as_ref().to_path_buf(), splicing_manifest)
+ .unwrap()
+ .splice_workspace();
assert!(workspace_manifest.is_err());
@@ -1217,13 +1098,10 @@
// Splice the workspace
let workspace_root = tempfile::tempdir().unwrap();
- let workspace_manifest = Splicer::new(
- workspace_root.as_ref().to_path_buf(),
- splicing_manifest,
- ExtraManifestsManifest::default(),
- )
- .unwrap()
- .splice_workspace();
+ let workspace_manifest =
+ Splicer::new(workspace_root.as_ref().to_path_buf(), splicing_manifest)
+ .unwrap()
+ .splice_workspace();
assert!(workspace_manifest.is_err());
@@ -1243,14 +1121,11 @@
// Splice the workspace
let workspace_root = tempfile::tempdir().unwrap();
- let workspace_manifest = Splicer::new(
- workspace_root.as_ref().to_path_buf(),
- splicing_manifest,
- ExtraManifestsManifest::default(),
- )
- .unwrap()
- .splice_workspace()
- .unwrap();
+ let workspace_manifest =
+ Splicer::new(workspace_root.as_ref().to_path_buf(), splicing_manifest)
+ .unwrap()
+ .splice_workspace()
+ .unwrap();
// Ensure metadata is valid
let metadata = generate_metadata(workspace_manifest.as_path_buf());
@@ -1275,14 +1150,11 @@
// Splice the workspace
let workspace_root = tempfile::tempdir().unwrap();
- let workspace_manifest = Splicer::new(
- workspace_root.as_ref().to_path_buf(),
- splicing_manifest,
- ExtraManifestsManifest::default(),
- )
- .unwrap()
- .splice_workspace()
- .unwrap();
+ let workspace_manifest =
+ Splicer::new(workspace_root.as_ref().to_path_buf(), splicing_manifest)
+ .unwrap()
+ .splice_workspace()
+ .unwrap();
// Check the default resolver version
let cargo_manifest = cargo_toml::Manifest::from_str(
@@ -1327,14 +1199,11 @@
// Splice the workspace
let workspace_root = tempfile::tempdir().unwrap();
- let workspace_manifest = Splicer::new(
- workspace_root.as_ref().to_path_buf(),
- splicing_manifest,
- ExtraManifestsManifest::default(),
- )
- .unwrap()
- .splice_workspace()
- .unwrap();
+ let workspace_manifest =
+ Splicer::new(workspace_root.as_ref().to_path_buf(), splicing_manifest)
+ .unwrap()
+ .splice_workspace()
+ .unwrap();
// Check the specified resolver version
let cargo_manifest = cargo_toml::Manifest::from_str(
@@ -1371,126 +1240,6 @@
}
#[test]
- fn extra_workspace_member_with_package() {
- let (splicing_manifest, cache_dir) = mock_splicing_manifest_with_package();
-
- // Add the extra workspace member
- let extra_manifests_manifest = mock_extra_manifest_digest(cache_dir.as_ref());
-
- // Splice the workspace
- let workspace_root = tempfile::tempdir().unwrap();
- let workspace_manifest = Splicer::new(
- workspace_root.as_ref().to_path_buf(),
- splicing_manifest,
- extra_manifests_manifest,
- )
- .unwrap()
- .splice_workspace()
- .unwrap();
-
- // Ensure metadata is valid
- let metadata = generate_metadata(workspace_manifest.as_path_buf());
- assert_sort_eq!(
- metadata.workspace_members,
- vec![
- new_package_id("extra_pkg", workspace_root.as_ref(), false),
- new_package_id("root_pkg", workspace_root.as_ref(), true),
- ]
- );
-
- // Ensure the workspace metadata annotations are populated
- assert_eq!(
- metadata.workspace_metadata,
- mock_workspace_metadata(true, None)
- );
-
- // Ensure lockfile was successfully spliced
- cargo_lock::Lockfile::load(workspace_root.as_ref().join("Cargo.lock")).unwrap();
- }
-
- #[test]
- fn extra_workspace_member_with_workspace() {
- let (splicing_manifest, cache_dir) = mock_splicing_manifest_with_workspace();
-
- // Add the extra workspace member
- let extra_manifests_manifest = mock_extra_manifest_digest(cache_dir.as_ref());
-
- // Splice the workspace
- let workspace_root = tempfile::tempdir().unwrap();
- let workspace_manifest = Splicer::new(
- workspace_root.as_ref().to_path_buf(),
- splicing_manifest,
- extra_manifests_manifest,
- )
- .unwrap()
- .splice_workspace()
- .unwrap();
-
- // Ensure metadata is valid
- let metadata = generate_metadata(workspace_manifest.as_path_buf());
- assert_sort_eq!(
- metadata.workspace_members,
- vec![
- new_package_id("sub_pkg_a", workspace_root.as_ref(), false),
- new_package_id("sub_pkg_b", workspace_root.as_ref(), false),
- new_package_id("extra_pkg", workspace_root.as_ref(), false),
- new_package_id("root_pkg", workspace_root.as_ref(), true),
- ]
- );
-
- // Ensure the workspace metadata annotations are populated
- assert_eq!(
- metadata.workspace_metadata,
- mock_workspace_metadata(true, Some("pkg_root"))
- );
-
- // Ensure lockfile was successfully spliced
- cargo_lock::Lockfile::load(workspace_root.as_ref().join("Cargo.lock")).unwrap();
- }
-
- #[test]
- fn extra_workspace_member_with_multi_package() {
- let (splicing_manifest, cache_dir) = mock_splicing_manifest_with_multi_package();
-
- // Add the extra workspace member
- let extra_manifests_manifest = mock_extra_manifest_digest(cache_dir.as_ref());
-
- // Splice the workspace
- let workspace_root = tempfile::tempdir().unwrap();
- let workspace_manifest = Splicer::new(
- workspace_root.as_ref().to_path_buf(),
- splicing_manifest,
- extra_manifests_manifest,
- )
- .unwrap()
- .splice_workspace()
- .unwrap();
-
- // Ensure metadata is valid
- let metadata = generate_metadata(workspace_manifest.as_path_buf());
- assert_sort_eq!(
- metadata.workspace_members,
- vec![
- new_package_id("pkg_a", workspace_root.as_ref(), false),
- new_package_id("pkg_b", workspace_root.as_ref(), false),
- new_package_id("pkg_c", workspace_root.as_ref(), false),
- new_package_id("extra_pkg", workspace_root.as_ref(), false),
- // Multi package renderings always add a root package
- new_package_id("direct-cargo-bazel-deps", workspace_root.as_ref(), true),
- ]
- );
-
- // Ensure the workspace metadata annotations are populated
- assert_eq!(
- metadata.workspace_metadata,
- mock_workspace_metadata(true, None)
- );
-
- // Ensure lockfile was successfully spliced
- cargo_lock::Lockfile::load(workspace_root.as_ref().join("Cargo.lock")).unwrap();
- }
-
- #[test]
fn cargo_config_setup() {
let (mut splicing_manifest, _cache_dir) = mock_splicing_manifest_with_workspace_in_root();
@@ -1502,14 +1251,10 @@
// Splice the workspace
let workspace_root = tempfile::tempdir().unwrap();
- Splicer::new(
- workspace_root.as_ref().to_path_buf(),
- splicing_manifest,
- ExtraManifestsManifest::default(),
- )
- .unwrap()
- .splice_workspace()
- .unwrap();
+ Splicer::new(workspace_root.as_ref().to_path_buf(), splicing_manifest)
+ .unwrap()
+ .splice_workspace()
+ .unwrap();
let cargo_config = workspace_root.as_ref().join(".cargo").join("config.toml");
assert!(cargo_config.exists());
@@ -1539,14 +1284,10 @@
// Splice the workspace
let workspace_root = tempfile::tempdir().unwrap();
- Splicer::new(
- workspace_root.as_ref().to_path_buf(),
- splicing_manifest,
- ExtraManifestsManifest::default(),
- )
- .unwrap()
- .splice_workspace()
- .unwrap();
+ Splicer::new(workspace_root.as_ref().to_path_buf(), splicing_manifest)
+ .unwrap()
+ .splice_workspace()
+ .unwrap();
let cargo_config = workspace_root.as_ref().join(".cargo").join("config.toml");
assert!(cargo_config.exists());
@@ -1570,13 +1311,9 @@
// Splice the workspace
let workspace_root = temp_dir.as_ref().join("workspace_root");
- let splicing_result = Splicer::new(
- workspace_root.clone(),
- splicing_manifest,
- ExtraManifestsManifest::default(),
- )
- .unwrap()
- .splice_workspace();
+ let splicing_result = Splicer::new(workspace_root.clone(), splicing_manifest)
+ .unwrap()
+ .splice_workspace();
// Ensure cargo config files in parent directories lead to errors
assert!(splicing_result.is_err());
diff --git a/docs/crate_universe.md b/docs/crate_universe.md
index 58d5e54..c808ce3 100644
--- a/docs/crate_universe.md
+++ b/docs/crate_universe.md
@@ -183,10 +183,9 @@
## crates_repository
<pre>
-crates_repository(<a href="#crates_repository-name">name</a>, <a href="#crates_repository-annotations">annotations</a>, <a href="#crates_repository-cargo_config">cargo_config</a>, <a href="#crates_repository-extra_workspace_member_url_template">extra_workspace_member_url_template</a>,
- <a href="#crates_repository-extra_workspace_members">extra_workspace_members</a>, <a href="#crates_repository-generate_build_scripts">generate_build_scripts</a>, <a href="#crates_repository-generator">generator</a>, <a href="#crates_repository-generator_sha256s">generator_sha256s</a>,
- <a href="#crates_repository-generator_urls">generator_urls</a>, <a href="#crates_repository-isolated">isolated</a>, <a href="#crates_repository-lockfile">lockfile</a>, <a href="#crates_repository-lockfile_kind">lockfile_kind</a>, <a href="#crates_repository-manifests">manifests</a>, <a href="#crates_repository-packages">packages</a>, <a href="#crates_repository-quiet">quiet</a>,
- <a href="#crates_repository-render_config">render_config</a>, <a href="#crates_repository-repo_mapping">repo_mapping</a>, <a href="#crates_repository-rust_toolchain_cargo_template">rust_toolchain_cargo_template</a>,
+crates_repository(<a href="#crates_repository-name">name</a>, <a href="#crates_repository-annotations">annotations</a>, <a href="#crates_repository-cargo_config">cargo_config</a>, <a href="#crates_repository-generate_build_scripts">generate_build_scripts</a>, <a href="#crates_repository-generator">generator</a>,
+ <a href="#crates_repository-generator_sha256s">generator_sha256s</a>, <a href="#crates_repository-generator_urls">generator_urls</a>, <a href="#crates_repository-isolated">isolated</a>, <a href="#crates_repository-lockfile">lockfile</a>, <a href="#crates_repository-lockfile_kind">lockfile_kind</a>, <a href="#crates_repository-manifests">manifests</a>,
+ <a href="#crates_repository-packages">packages</a>, <a href="#crates_repository-quiet">quiet</a>, <a href="#crates_repository-render_config">render_config</a>, <a href="#crates_repository-repo_mapping">repo_mapping</a>, <a href="#crates_repository-rust_toolchain_cargo_template">rust_toolchain_cargo_template</a>,
<a href="#crates_repository-rust_toolchain_rustc_template">rust_toolchain_rustc_template</a>, <a href="#crates_repository-rust_version">rust_version</a>, <a href="#crates_repository-splicing_config">splicing_config</a>,
<a href="#crates_repository-supported_platform_triples">supported_platform_triples</a>)
</pre>
@@ -265,8 +264,6 @@
| <a id="crates_repository-name"></a>name | A unique name for this repository. | <a href="https://bazel.build/docs/build-ref.html#name">Name</a> | required | |
| <a id="crates_repository-annotations"></a>annotations | Extra settings to apply to crates. See [crate.annotation](#crateannotation). | <a href="https://bazel.build/docs/skylark/lib/dict.html">Dictionary: String -> List of strings</a> | optional | {} |
| <a id="crates_repository-cargo_config"></a>cargo_config | A [Cargo configuration](https://doc.rust-lang.org/cargo/reference/config.html) file | <a href="https://bazel.build/docs/build-ref.html#labels">Label</a> | optional | None |
-| <a id="crates_repository-extra_workspace_member_url_template"></a>extra_workspace_member_url_template | The registry url to use when fetching extra workspace members | String | optional | "https://crates.io/api/v1/crates/{name}/{version}/download" |
-| <a id="crates_repository-extra_workspace_members"></a>extra_workspace_members | Additional crates to download and include as a workspace member. This is unfortunately required in order to add information about "binary-only" crates so that a <code>rust_binary</code> may be generated for it. [rust-lang/cargo#9096](https://github.com/rust-lang/cargo/issues/9096) tracks an RFC which may solve for this. | <a href="https://bazel.build/docs/skylark/lib/dict.html">Dictionary: String -> String</a> | optional | {} |
| <a id="crates_repository-generate_build_scripts"></a>generate_build_scripts | Whether or not to generate [cargo build scripts](https://doc.rust-lang.org/cargo/reference/build-scripts.html) by default. | Boolean | optional | True |
| <a id="crates_repository-generator"></a>generator | The absolute label of a generator. Eg. <code>@cargo_bazel_bootstrap//:cargo-bazel</code>. This is typically used when bootstrapping | String | optional | "" |
| <a id="crates_repository-generator_sha256s"></a>generator_sha256s | Dictionary of <code>host_triple</code> -> <code>sha256</code> for a <code>cargo-bazel</code> binary. | <a href="https://bazel.build/docs/skylark/lib/dict.html">Dictionary: String -> String</a> | optional | {} |
diff --git a/examples/crate_universe/WORKSPACE.bazel b/examples/crate_universe/WORKSPACE.bazel
index 0f90c22..f4fe58b 100644
--- a/examples/crate_universe/WORKSPACE.bazel
+++ b/examples/crate_universe/WORKSPACE.bazel
@@ -129,32 +129,6 @@
cargo_workspace_crate_repositories()
###############################################################################
-# E X T R A W O R K S P A C E M E M B E R S
-###############################################################################
-
-crates_repository(
- name = "crate_index_extra_members",
- extra_workspace_members = {
- "texture-synthesis-cli": crate.workspace_member(
- sha256 = "a7dbdf13f5e6f214750fce1073279b71ce3076157a8d337c9b0f0e14334e2aec",
- version = "0.8.2",
- ),
- },
- # `generator` is not necessary in official releases.
- # See load satement for `cargo_bazel_bootstrap`.
- generator = "@cargo_bazel_bootstrap//:cargo-bazel",
- lockfile = "//extra_workspace_members:Cargo.Bazel.lock",
- manifests = ["//extra_workspace_members:Cargo.toml"],
-)
-
-load(
- "@crate_index_extra_members//:defs.bzl",
- extra_workspace_members_crate_repositories = "crate_repositories",
-)
-
-extra_workspace_members_crate_repositories()
-
-###############################################################################
# M U L T I P A C K A G E
###############################################################################
diff --git a/examples/crate_universe/extra_workspace_members/.bazelrc b/examples/crate_universe/extra_workspace_members/.bazelrc
deleted file mode 100644
index d63c809..0000000
--- a/examples/crate_universe/extra_workspace_members/.bazelrc
+++ /dev/null
@@ -1,13 +0,0 @@
-# A config file containing Bazel settings
-
-# Enable rustfmt
-build:strict --aspects=@rules_rust//rust:defs.bzl%rustfmt_aspect
-build:strict --output_groups=+rustfmt_checks
-
-# Enable clippy
-build:strict --aspects=@rules_rust//rust:defs.bzl%rust_clippy_aspect
-build:strict --output_groups=+clippy_checks
-
-# This import should always be last to allow users to override
-# settings for local development.
-try-import %workspace%/user.bazelrc
diff --git a/examples/crate_universe/extra_workspace_members/BUILD.bazel b/examples/crate_universe/extra_workspace_members/BUILD.bazel
deleted file mode 100644
index 199257f..0000000
--- a/examples/crate_universe/extra_workspace_members/BUILD.bazel
+++ /dev/null
@@ -1,22 +0,0 @@
-load("@crate_index_extra_members//:defs.bzl", "all_crate_deps")
-load("@rules_rust//rust:defs.bzl", "rust_binary", "rust_test")
-
-rust_binary(
- name = "extra_workspace_member",
- srcs = ["src/main.rs"],
- data = ["@crate_index_extra_members//:texture-synthesis-cli__texture-synthesis"],
- proc_macro_deps = all_crate_deps(proc_macro = True),
- rustc_env = {
- "TEXTURE_SYNTHESIS_CLI": "$(rootpath @crate_index_extra_members//:texture-synthesis-cli__texture-synthesis)",
- },
- deps = all_crate_deps(),
-)
-
-rust_test(
- name = "unit_test",
- crate = ":extra_workspace_member",
- data = ["@crate_index_extra_members//:texture-synthesis-cli__texture-synthesis"],
- rustc_env = {
- "TEXTURE_SYNTHESIS_CLI": "$(rootpath @crate_index_extra_members//:texture-synthesis-cli__texture-synthesis)",
- },
-)
diff --git a/examples/crate_universe/extra_workspace_members/Cargo.Bazel.lock b/examples/crate_universe/extra_workspace_members/Cargo.Bazel.lock
deleted file mode 100644
index db5185f..0000000
--- a/examples/crate_universe/extra_workspace_members/Cargo.Bazel.lock
+++ /dev/null
@@ -1,3278 +0,0 @@
-{
- "checksum": "36575ef80dadae9bb45b4e7aa2f7bc7a38e272acf76421f97b2b7b969aa5c52e",
- "crates": {
- "adler32 1.2.0": {
- "name": "adler32",
- "version": "1.2.0",
- "repository": {
- "Http": {
- "url": "https://crates.io/api/v1/crates/adler32/1.2.0/download",
- "sha256": "aae1277d39aeec15cb388266ecc24b11c80469deae6067e17a1a7aa9e5c1f234"
- }
- },
- "targets": [
- {
- "Library": {
- "crate_name": "adler32",
- "crate_root": "src/lib.rs",
- "srcs": {
- "include": [
- "**/*.rs"
- ],
- "exclude": []
- }
- }
- }
- ],
- "library_target_name": "adler32",
- "common_attrs": {
- "compile_data_glob": [
- "**"
- ],
- "crate_features": [
- "default",
- "std"
- ],
- "edition": "2018",
- "version": "1.2.0"
- },
- "license": "Zlib"
- },
- "ansi_term 0.12.1": {
- "name": "ansi_term",
- "version": "0.12.1",
- "repository": {
- "Http": {
- "url": "https://crates.io/api/v1/crates/ansi_term/0.12.1/download",
- "sha256": "d52a9bb7ec0cf484c551830a7ce27bd20d67eac647e1befb56b0be4ee39a55d2"
- }
- },
- "targets": [
- {
- "Library": {
- "crate_name": "ansi_term",
- "crate_root": "src/lib.rs",
- "srcs": {
- "include": [
- "**/*.rs"
- ],
- "exclude": []
- }
- }
- }
- ],
- "library_target_name": "ansi_term",
- "common_attrs": {
- "compile_data_glob": [
- "**"
- ],
- "deps": {
- "common": [],
- "selects": {
- "cfg(target_os = \"windows\")": [
- {
- "id": "winapi 0.3.9",
- "target": "winapi"
- }
- ]
- }
- },
- "edition": "2015",
- "version": "0.12.1"
- },
- "license": "MIT"
- },
- "atty 0.2.14": {
- "name": "atty",
- "version": "0.2.14",
- "repository": {
- "Http": {
- "url": "https://crates.io/api/v1/crates/atty/0.2.14/download",
- "sha256": "d9b39be18770d11421cdb1b9947a45dd3f37e93092cbf377614828a319d5fee8"
- }
- },
- "targets": [
- {
- "Library": {
- "crate_name": "atty",
- "crate_root": "src/lib.rs",
- "srcs": {
- "include": [
- "**/*.rs"
- ],
- "exclude": []
- }
- }
- }
- ],
- "library_target_name": "atty",
- "common_attrs": {
- "compile_data_glob": [
- "**"
- ],
- "deps": {
- "common": [],
- "selects": {
- "cfg(target_os = \"hermit\")": [
- {
- "id": "hermit-abi 0.1.19",
- "target": "hermit_abi"
- }
- ],
- "cfg(unix)": [
- {
- "id": "libc 0.2.126",
- "target": "libc"
- }
- ],
- "cfg(windows)": [
- {
- "id": "winapi 0.3.9",
- "target": "winapi"
- }
- ]
- }
- },
- "edition": "2015",
- "version": "0.2.14"
- },
- "license": "MIT"
- },
- "autocfg 1.1.0": {
- "name": "autocfg",
- "version": "1.1.0",
- "repository": {
- "Http": {
- "url": "https://crates.io/api/v1/crates/autocfg/1.1.0/download",
- "sha256": "d468802bab17cbc0cc575e9b053f41e72aa36bfa6b7f55e3529ffa43161b97fa"
- }
- },
- "targets": [
- {
- "Library": {
- "crate_name": "autocfg",
- "crate_root": "src/lib.rs",
- "srcs": {
- "include": [
- "**/*.rs"
- ],
- "exclude": []
- }
- }
- }
- ],
- "library_target_name": "autocfg",
- "common_attrs": {
- "compile_data_glob": [
- "**"
- ],
- "edition": "2015",
- "version": "1.1.0"
- },
- "license": "Apache-2.0 OR MIT"
- },
- "bitflags 1.3.2": {
- "name": "bitflags",
- "version": "1.3.2",
- "repository": {
- "Http": {
- "url": "https://crates.io/api/v1/crates/bitflags/1.3.2/download",
- "sha256": "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a"
- }
- },
- "targets": [
- {
- "Library": {
- "crate_name": "bitflags",
- "crate_root": "src/lib.rs",
- "srcs": {
- "include": [
- "**/*.rs"
- ],
- "exclude": []
- }
- }
- }
- ],
- "library_target_name": "bitflags",
- "common_attrs": {
- "compile_data_glob": [
- "**"
- ],
- "crate_features": [
- "default"
- ],
- "edition": "2018",
- "version": "1.3.2"
- },
- "license": "MIT/Apache-2.0"
- },
- "bytemuck 1.9.1": {
- "name": "bytemuck",
- "version": "1.9.1",
- "repository": {
- "Http": {
- "url": "https://crates.io/api/v1/crates/bytemuck/1.9.1/download",
- "sha256": "cdead85bdec19c194affaeeb670c0e41fe23de31459efd1c174d049269cf02cc"
- }
- },
- "targets": [
- {
- "Library": {
- "crate_name": "bytemuck",
- "crate_root": "src/lib.rs",
- "srcs": {
- "include": [
- "**/*.rs"
- ],
- "exclude": []
- }
- }
- }
- ],
- "library_target_name": "bytemuck",
- "common_attrs": {
- "compile_data_glob": [
- "**"
- ],
- "edition": "2018",
- "version": "1.9.1"
- },
- "license": "Zlib OR Apache-2.0 OR MIT"
- },
- "byteorder 1.4.3": {
- "name": "byteorder",
- "version": "1.4.3",
- "repository": {
- "Http": {
- "url": "https://crates.io/api/v1/crates/byteorder/1.4.3/download",
- "sha256": "14c189c53d098945499cdfa7ecc63567cf3886b3332b312a5b4585d8d3a6a610"
- }
- },
- "targets": [
- {
- "Library": {
- "crate_name": "byteorder",
- "crate_root": "src/lib.rs",
- "srcs": {
- "include": [
- "**/*.rs"
- ],
- "exclude": []
- }
- }
- }
- ],
- "library_target_name": "byteorder",
- "common_attrs": {
- "compile_data_glob": [
- "**"
- ],
- "crate_features": [
- "default",
- "std"
- ],
- "edition": "2018",
- "version": "1.4.3"
- },
- "license": "Unlicense OR MIT"
- },
- "cfg-if 1.0.0": {
- "name": "cfg-if",
- "version": "1.0.0",
- "repository": {
- "Http": {
- "url": "https://crates.io/api/v1/crates/cfg-if/1.0.0/download",
- "sha256": "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd"
- }
- },
- "targets": [
- {
- "Library": {
- "crate_name": "cfg_if",
- "crate_root": "src/lib.rs",
- "srcs": {
- "include": [
- "**/*.rs"
- ],
- "exclude": []
- }
- }
- }
- ],
- "library_target_name": "cfg_if",
- "common_attrs": {
- "compile_data_glob": [
- "**"
- ],
- "edition": "2018",
- "version": "1.0.0"
- },
- "license": "MIT/Apache-2.0"
- },
- "clap 2.34.0": {
- "name": "clap",
- "version": "2.34.0",
- "repository": {
- "Http": {
- "url": "https://crates.io/api/v1/crates/clap/2.34.0/download",
- "sha256": "a0610544180c38b88101fecf2dd634b174a62eef6946f84dfc6a7127512b381c"
- }
- },
- "targets": [
- {
- "Library": {
- "crate_name": "clap",
- "crate_root": "src/lib.rs",
- "srcs": {
- "include": [
- "**/*.rs"
- ],
- "exclude": []
- }
- }
- }
- ],
- "library_target_name": "clap",
- "common_attrs": {
- "compile_data_glob": [
- "**"
- ],
- "crate_features": [
- "ansi_term",
- "atty",
- "color",
- "default",
- "strsim",
- "suggestions",
- "vec_map"
- ],
- "deps": {
- "common": [
- {
- "id": "atty 0.2.14",
- "target": "atty"
- },
- {
- "id": "bitflags 1.3.2",
- "target": "bitflags"
- },
- {
- "id": "strsim 0.8.0",
- "target": "strsim"
- },
- {
- "id": "textwrap 0.11.0",
- "target": "textwrap"
- },
- {
- "id": "unicode-width 0.1.9",
- "target": "unicode_width"
- },
- {
- "id": "vec_map 0.8.2",
- "target": "vec_map"
- }
- ],
- "selects": {
- "cfg(not(windows))": [
- {
- "id": "ansi_term 0.12.1",
- "target": "ansi_term"
- }
- ]
- }
- },
- "edition": "2018",
- "version": "2.34.0"
- },
- "license": "MIT"
- },
- "color_quant 1.1.0": {
- "name": "color_quant",
- "version": "1.1.0",
- "repository": {
- "Http": {
- "url": "https://crates.io/api/v1/crates/color_quant/1.1.0/download",
- "sha256": "3d7b894f5411737b7867f4827955924d7c254fc9f4d91a6aad6b097804b1018b"
- }
- },
- "targets": [
- {
- "Library": {
- "crate_name": "color_quant",
- "crate_root": "src/lib.rs",
- "srcs": {
- "include": [
- "**/*.rs"
- ],
- "exclude": []
- }
- }
- }
- ],
- "library_target_name": "color_quant",
- "common_attrs": {
- "compile_data_glob": [
- "**"
- ],
- "edition": "2015",
- "version": "1.1.0"
- },
- "license": "MIT"
- },
- "console 0.15.0": {
- "name": "console",
- "version": "0.15.0",
- "repository": {
- "Http": {
- "url": "https://crates.io/api/v1/crates/console/0.15.0/download",
- "sha256": "a28b32d32ca44b70c3e4acd7db1babf555fa026e385fb95f18028f88848b3c31"
- }
- },
- "targets": [
- {
- "Library": {
- "crate_name": "console",
- "crate_root": "src/lib.rs",
- "srcs": {
- "include": [
- "**/*.rs"
- ],
- "exclude": []
- }
- }
- }
- ],
- "library_target_name": "console",
- "common_attrs": {
- "compile_data_glob": [
- "**"
- ],
- "crate_features": [
- "ansi-parsing",
- "default",
- "regex",
- "unicode-width"
- ],
- "deps": {
- "common": [
- {
- "id": "libc 0.2.126",
- "target": "libc"
- },
- {
- "id": "once_cell 1.12.0",
- "target": "once_cell"
- },
- {
- "id": "regex 1.5.6",
- "target": "regex"
- },
- {
- "id": "terminal_size 0.1.17",
- "target": "terminal_size"
- },
- {
- "id": "unicode-width 0.1.9",
- "target": "unicode_width"
- }
- ],
- "selects": {
- "cfg(windows)": [
- {
- "id": "encode_unicode 0.3.6",
- "target": "encode_unicode"
- },
- {
- "id": "winapi 0.3.9",
- "target": "winapi"
- }
- ]
- }
- },
- "edition": "2018",
- "version": "0.15.0"
- },
- "license": "MIT"
- },
- "crc32fast 1.3.2": {
- "name": "crc32fast",
- "version": "1.3.2",
- "repository": {
- "Http": {
- "url": "https://crates.io/api/v1/crates/crc32fast/1.3.2/download",
- "sha256": "b540bd8bc810d3885c6ea91e2018302f68baba2129ab3e88f32389ee9370880d"
- }
- },
- "targets": [
- {
- "Library": {
- "crate_name": "crc32fast",
- "crate_root": "src/lib.rs",
- "srcs": {
- "include": [
- "**/*.rs"
- ],
- "exclude": []
- }
- }
- },
- {
- "BuildScript": {
- "crate_name": "build_script_build",
- "crate_root": "build.rs",
- "srcs": {
- "include": [
- "**/*.rs"
- ],
- "exclude": []
- }
- }
- }
- ],
- "library_target_name": "crc32fast",
- "common_attrs": {
- "compile_data_glob": [
- "**"
- ],
- "crate_features": [
- "default",
- "std"
- ],
- "deps": {
- "common": [
- {
- "id": "cfg-if 1.0.0",
- "target": "cfg_if"
- },
- {
- "id": "crc32fast 1.3.2",
- "target": "build_script_build"
- }
- ],
- "selects": {}
- },
- "edition": "2015",
- "version": "1.3.2"
- },
- "build_script_attrs": {
- "data_glob": [
- "**"
- ]
- },
- "license": "MIT OR Apache-2.0"
- },
- "crossbeam-utils 0.8.8": {
- "name": "crossbeam-utils",
- "version": "0.8.8",
- "repository": {
- "Http": {
- "url": "https://crates.io/api/v1/crates/crossbeam-utils/0.8.8/download",
- "sha256": "0bf124c720b7686e3c2663cf54062ab0f68a88af2fb6a030e87e30bf721fcb38"
- }
- },
- "targets": [
- {
- "Library": {
- "crate_name": "crossbeam_utils",
- "crate_root": "src/lib.rs",
- "srcs": {
- "include": [
- "**/*.rs"
- ],
- "exclude": []
- }
- }
- },
- {
- "BuildScript": {
- "crate_name": "build_script_build",
- "crate_root": "build.rs",
- "srcs": {
- "include": [
- "**/*.rs"
- ],
- "exclude": []
- }
- }
- }
- ],
- "library_target_name": "crossbeam_utils",
- "common_attrs": {
- "compile_data_glob": [
- "**"
- ],
- "crate_features": [
- "default",
- "lazy_static",
- "std"
- ],
- "deps": {
- "common": [
- {
- "id": "cfg-if 1.0.0",
- "target": "cfg_if"
- },
- {
- "id": "crossbeam-utils 0.8.8",
- "target": "build_script_build"
- },
- {
- "id": "lazy_static 1.4.0",
- "target": "lazy_static"
- }
- ],
- "selects": {}
- },
- "edition": "2018",
- "version": "0.8.8"
- },
- "build_script_attrs": {
- "data_glob": [
- "**"
- ]
- },
- "license": "MIT OR Apache-2.0"
- },
- "deflate 0.8.6": {
- "name": "deflate",
- "version": "0.8.6",
- "repository": {
- "Http": {
- "url": "https://crates.io/api/v1/crates/deflate/0.8.6/download",
- "sha256": "73770f8e1fe7d64df17ca66ad28994a0a623ea497fa69486e14984e715c5d174"
- }
- },
- "targets": [
- {
- "Library": {
- "crate_name": "deflate",
- "crate_root": "src/lib.rs",
- "srcs": {
- "include": [
- "**/*.rs"
- ],
- "exclude": []
- }
- }
- }
- ],
- "library_target_name": "deflate",
- "common_attrs": {
- "compile_data_glob": [
- "**"
- ],
- "deps": {
- "common": [
- {
- "id": "adler32 1.2.0",
- "target": "adler32"
- },
- {
- "id": "byteorder 1.4.3",
- "target": "byteorder"
- }
- ],
- "selects": {}
- },
- "edition": "2018",
- "version": "0.8.6"
- },
- "license": "MIT/Apache-2.0"
- },
- "encode_unicode 0.3.6": {
- "name": "encode_unicode",
- "version": "0.3.6",
- "repository": {
- "Http": {
- "url": "https://crates.io/api/v1/crates/encode_unicode/0.3.6/download",
- "sha256": "a357d28ed41a50f9c765dbfe56cbc04a64e53e5fc58ba79fbc34c10ef3df831f"
- }
- },
- "targets": [
- {
- "Library": {
- "crate_name": "encode_unicode",
- "crate_root": "src/lib.rs",
- "srcs": {
- "include": [
- "**/*.rs"
- ],
- "exclude": []
- }
- }
- }
- ],
- "library_target_name": "encode_unicode",
- "common_attrs": {
- "compile_data_glob": [
- "**"
- ],
- "crate_features": [
- "default",
- "std"
- ],
- "edition": "2015",
- "version": "0.3.6"
- },
- "license": "MIT/Apache-2.0"
- },
- "extra_workspace_members 0.1.0": {
- "name": "extra_workspace_members",
- "version": "0.1.0",
- "repository": null,
- "targets": [
- {
- "Binary": {
- "crate_name": "extra_workspace_members",
- "crate_root": "src/main.rs",
- "srcs": {
- "include": [
- "**/*.rs"
- ],
- "exclude": []
- }
- }
- }
- ],
- "library_target_name": null,
- "common_attrs": {
- "compile_data_glob": [
- "**"
- ],
- "deps": {
- "common": [
- {
- "id": "ferris-says 0.2.1",
- "target": "ferris_says"
- }
- ],
- "selects": {}
- },
- "edition": "2015",
- "version": "0.1.0"
- },
- "license": null
- },
- "ferris-says 0.2.1": {
- "name": "ferris-says",
- "version": "0.2.1",
- "repository": {
- "Http": {
- "url": "https://crates.io/api/v1/crates/ferris-says/0.2.1/download",
- "sha256": "9515ec2dd9606ec230f6b2d1f25fd9e808a2f2af600143f7efe7e5865505b7aa"
- }
- },
- "targets": [
- {
- "Library": {
- "crate_name": "ferris_says",
- "crate_root": "src/lib.rs",
- "srcs": {
- "include": [
- "**/*.rs"
- ],
- "exclude": []
- }
- }
- }
- ],
- "library_target_name": "ferris_says",
- "common_attrs": {
- "compile_data_glob": [
- "**"
- ],
- "deps": {
- "common": [
- {
- "id": "smallvec 0.4.5",
- "target": "smallvec"
- },
- {
- "id": "textwrap 0.13.4",
- "target": "textwrap"
- },
- {
- "id": "unicode-width 0.1.9",
- "target": "unicode_width"
- }
- ],
- "selects": {}
- },
- "edition": "2015",
- "version": "0.2.1"
- },
- "license": "MIT/Apache-2.0"
- },
- "heck 0.3.3": {
- "name": "heck",
- "version": "0.3.3",
- "repository": {
- "Http": {
- "url": "https://crates.io/api/v1/crates/heck/0.3.3/download",
- "sha256": "6d621efb26863f0e9924c6ac577e8275e5e6b77455db64ffa6c65c904e9e132c"
- }
- },
- "targets": [
- {
- "Library": {
- "crate_name": "heck",
- "crate_root": "src/lib.rs",
- "srcs": {
- "include": [
- "**/*.rs"
- ],
- "exclude": []
- }
- }
- }
- ],
- "library_target_name": "heck",
- "common_attrs": {
- "compile_data_glob": [
- "**"
- ],
- "deps": {
- "common": [
- {
- "id": "unicode-segmentation 1.9.0",
- "target": "unicode_segmentation"
- }
- ],
- "selects": {}
- },
- "edition": "2018",
- "version": "0.3.3"
- },
- "license": "MIT OR Apache-2.0"
- },
- "hermit-abi 0.1.19": {
- "name": "hermit-abi",
- "version": "0.1.19",
- "repository": {
- "Http": {
- "url": "https://crates.io/api/v1/crates/hermit-abi/0.1.19/download",
- "sha256": "62b467343b94ba476dcb2500d242dadbb39557df889310ac77c5d99100aaac33"
- }
- },
- "targets": [
- {
- "Library": {
- "crate_name": "hermit_abi",
- "crate_root": "src/lib.rs",
- "srcs": {
- "include": [
- "**/*.rs"
- ],
- "exclude": []
- }
- }
- }
- ],
- "library_target_name": "hermit_abi",
- "common_attrs": {
- "compile_data_glob": [
- "**"
- ],
- "crate_features": [
- "default"
- ],
- "deps": {
- "common": [
- {
- "id": "libc 0.2.126",
- "target": "libc"
- }
- ],
- "selects": {}
- },
- "edition": "2018",
- "version": "0.1.19"
- },
- "license": "MIT/Apache-2.0"
- },
- "image 0.23.12": {
- "name": "image",
- "version": "0.23.12",
- "repository": {
- "Http": {
- "url": "https://crates.io/api/v1/crates/image/0.23.12/download",
- "sha256": "7ce04077ead78e39ae8610ad26216aed811996b043d47beed5090db674f9e9b5"
- }
- },
- "targets": [
- {
- "Library": {
- "crate_name": "image",
- "crate_root": "src/lib.rs",
- "srcs": {
- "include": [
- "**/*.rs"
- ],
- "exclude": []
- }
- }
- }
- ],
- "library_target_name": "image",
- "common_attrs": {
- "compile_data_glob": [
- "**"
- ],
- "crate_features": [
- "bmp",
- "jpeg",
- "png"
- ],
- "deps": {
- "common": [
- {
- "id": "bytemuck 1.9.1",
- "target": "bytemuck"
- },
- {
- "id": "byteorder 1.4.3",
- "target": "byteorder"
- },
- {
- "id": "color_quant 1.1.0",
- "target": "color_quant"
- },
- {
- "id": "jpeg-decoder 0.1.22",
- "target": "jpeg_decoder",
- "alias": "jpeg"
- },
- {
- "id": "num-iter 0.1.43",
- "target": "num_iter"
- },
- {
- "id": "num-rational 0.3.2",
- "target": "num_rational"
- },
- {
- "id": "num-traits 0.2.15",
- "target": "num_traits"
- },
- {
- "id": "png 0.16.8",
- "target": "png"
- }
- ],
- "selects": {}
- },
- "edition": "2018",
- "version": "0.23.12"
- },
- "license": "MIT"
- },
- "indicatif 0.15.0": {
- "name": "indicatif",
- "version": "0.15.0",
- "repository": {
- "Http": {
- "url": "https://crates.io/api/v1/crates/indicatif/0.15.0/download",
- "sha256": "7baab56125e25686df467fe470785512329883aab42696d661247aca2a2896e4"
- }
- },
- "targets": [
- {
- "Library": {
- "crate_name": "indicatif",
- "crate_root": "src/lib.rs",
- "srcs": {
- "include": [
- "**/*.rs"
- ],
- "exclude": []
- }
- }
- }
- ],
- "library_target_name": "indicatif",
- "common_attrs": {
- "compile_data_glob": [
- "**"
- ],
- "crate_features": [
- "default"
- ],
- "deps": {
- "common": [
- {
- "id": "console 0.15.0",
- "target": "console"
- },
- {
- "id": "lazy_static 1.4.0",
- "target": "lazy_static"
- },
- {
- "id": "number_prefix 0.3.0",
- "target": "number_prefix"
- },
- {
- "id": "regex 1.5.6",
- "target": "regex"
- }
- ],
- "selects": {}
- },
- "edition": "2018",
- "version": "0.15.0"
- },
- "license": "MIT"
- },
- "jpeg-decoder 0.1.22": {
- "name": "jpeg-decoder",
- "version": "0.1.22",
- "repository": {
- "Http": {
- "url": "https://crates.io/api/v1/crates/jpeg-decoder/0.1.22/download",
- "sha256": "229d53d58899083193af11e15917b5640cd40b29ff475a1fe4ef725deb02d0f2"
- }
- },
- "targets": [
- {
- "Library": {
- "crate_name": "jpeg_decoder",
- "crate_root": "src/lib.rs",
- "srcs": {
- "include": [
- "**/*.rs"
- ],
- "exclude": []
- }
- }
- }
- ],
- "library_target_name": "jpeg_decoder",
- "common_attrs": {
- "compile_data_glob": [
- "**"
- ],
- "edition": "2015",
- "version": "0.1.22"
- },
- "license": "MIT / Apache-2.0"
- },
- "lazy_static 1.4.0": {
- "name": "lazy_static",
- "version": "1.4.0",
- "repository": {
- "Http": {
- "url": "https://crates.io/api/v1/crates/lazy_static/1.4.0/download",
- "sha256": "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646"
- }
- },
- "targets": [
- {
- "Library": {
- "crate_name": "lazy_static",
- "crate_root": "src/lib.rs",
- "srcs": {
- "include": [
- "**/*.rs"
- ],
- "exclude": []
- }
- }
- }
- ],
- "library_target_name": "lazy_static",
- "common_attrs": {
- "compile_data_glob": [
- "**"
- ],
- "edition": "2015",
- "version": "1.4.0"
- },
- "license": "MIT/Apache-2.0"
- },
- "libc 0.2.126": {
- "name": "libc",
- "version": "0.2.126",
- "repository": {
- "Http": {
- "url": "https://crates.io/api/v1/crates/libc/0.2.126/download",
- "sha256": "349d5a591cd28b49e1d1037471617a32ddcda5731b99419008085f72d5a53836"
- }
- },
- "targets": [
- {
- "Library": {
- "crate_name": "libc",
- "crate_root": "src/lib.rs",
- "srcs": {
- "include": [
- "**/*.rs"
- ],
- "exclude": []
- }
- }
- },
- {
- "BuildScript": {
- "crate_name": "build_script_build",
- "crate_root": "build.rs",
- "srcs": {
- "include": [
- "**/*.rs"
- ],
- "exclude": []
- }
- }
- }
- ],
- "library_target_name": "libc",
- "common_attrs": {
- "compile_data_glob": [
- "**"
- ],
- "crate_features": [
- "default",
- "std"
- ],
- "deps": {
- "common": [
- {
- "id": "libc 0.2.126",
- "target": "build_script_build"
- }
- ],
- "selects": {}
- },
- "edition": "2015",
- "version": "0.2.126"
- },
- "build_script_attrs": {
- "data_glob": [
- "**"
- ]
- },
- "license": "MIT OR Apache-2.0"
- },
- "miniz_oxide 0.3.7": {
- "name": "miniz_oxide",
- "version": "0.3.7",
- "repository": {
- "Http": {
- "url": "https://crates.io/api/v1/crates/miniz_oxide/0.3.7/download",
- "sha256": "791daaae1ed6889560f8c4359194f56648355540573244a5448a83ba1ecc7435"
- }
- },
- "targets": [
- {
- "Library": {
- "crate_name": "miniz_oxide",
- "crate_root": "src/lib.rs",
- "srcs": {
- "include": [
- "**/*.rs"
- ],
- "exclude": []
- }
- }
- }
- ],
- "library_target_name": "miniz_oxide",
- "common_attrs": {
- "compile_data_glob": [
- "**"
- ],
- "deps": {
- "common": [
- {
- "id": "adler32 1.2.0",
- "target": "adler32"
- }
- ],
- "selects": {}
- },
- "edition": "2018",
- "version": "0.3.7"
- },
- "license": "MIT"
- },
- "num-integer 0.1.45": {
- "name": "num-integer",
- "version": "0.1.45",
- "repository": {
- "Http": {
- "url": "https://crates.io/api/v1/crates/num-integer/0.1.45/download",
- "sha256": "225d3389fb3509a24c93f5c29eb6bde2586b98d9f016636dff58d7c6f7569cd9"
- }
- },
- "targets": [
- {
- "Library": {
- "crate_name": "num_integer",
- "crate_root": "src/lib.rs",
- "srcs": {
- "include": [
- "**/*.rs"
- ],
- "exclude": []
- }
- }
- },
- {
- "BuildScript": {
- "crate_name": "build_script_build",
- "crate_root": "build.rs",
- "srcs": {
- "include": [
- "**/*.rs"
- ],
- "exclude": []
- }
- }
- }
- ],
- "library_target_name": "num_integer",
- "common_attrs": {
- "compile_data_glob": [
- "**"
- ],
- "crate_features": [
- "i128",
- "std"
- ],
- "deps": {
- "common": [
- {
- "id": "num-integer 0.1.45",
- "target": "build_script_build"
- },
- {
- "id": "num-traits 0.2.15",
- "target": "num_traits"
- }
- ],
- "selects": {}
- },
- "edition": "2015",
- "version": "0.1.45"
- },
- "build_script_attrs": {
- "data_glob": [
- "**"
- ],
- "deps": {
- "common": [
- {
- "id": "autocfg 1.1.0",
- "target": "autocfg"
- }
- ],
- "selects": {}
- }
- },
- "license": "MIT OR Apache-2.0"
- },
- "num-iter 0.1.43": {
- "name": "num-iter",
- "version": "0.1.43",
- "repository": {
- "Http": {
- "url": "https://crates.io/api/v1/crates/num-iter/0.1.43/download",
- "sha256": "7d03e6c028c5dc5cac6e2dec0efda81fc887605bb3d884578bb6d6bf7514e252"
- }
- },
- "targets": [
- {
- "Library": {
- "crate_name": "num_iter",
- "crate_root": "src/lib.rs",
- "srcs": {
- "include": [
- "**/*.rs"
- ],
- "exclude": []
- }
- }
- },
- {
- "BuildScript": {
- "crate_name": "build_script_build",
- "crate_root": "build.rs",
- "srcs": {
- "include": [
- "**/*.rs"
- ],
- "exclude": []
- }
- }
- }
- ],
- "library_target_name": "num_iter",
- "common_attrs": {
- "compile_data_glob": [
- "**"
- ],
- "crate_features": [
- "default",
- "std"
- ],
- "deps": {
- "common": [
- {
- "id": "num-integer 0.1.45",
- "target": "num_integer"
- },
- {
- "id": "num-iter 0.1.43",
- "target": "build_script_build"
- },
- {
- "id": "num-traits 0.2.15",
- "target": "num_traits"
- }
- ],
- "selects": {}
- },
- "edition": "2015",
- "version": "0.1.43"
- },
- "build_script_attrs": {
- "data_glob": [
- "**"
- ],
- "deps": {
- "common": [
- {
- "id": "autocfg 1.1.0",
- "target": "autocfg"
- }
- ],
- "selects": {}
- }
- },
- "license": "MIT OR Apache-2.0"
- },
- "num-rational 0.3.2": {
- "name": "num-rational",
- "version": "0.3.2",
- "repository": {
- "Http": {
- "url": "https://crates.io/api/v1/crates/num-rational/0.3.2/download",
- "sha256": "12ac428b1cb17fce6f731001d307d351ec70a6d202fc2e60f7d4c5e42d8f4f07"
- }
- },
- "targets": [
- {
- "Library": {
- "crate_name": "num_rational",
- "crate_root": "src/lib.rs",
- "srcs": {
- "include": [
- "**/*.rs"
- ],
- "exclude": []
- }
- }
- },
- {
- "BuildScript": {
- "crate_name": "build_script_build",
- "crate_root": "build.rs",
- "srcs": {
- "include": [
- "**/*.rs"
- ],
- "exclude": []
- }
- }
- }
- ],
- "library_target_name": "num_rational",
- "common_attrs": {
- "compile_data_glob": [
- "**"
- ],
- "deps": {
- "common": [
- {
- "id": "num-integer 0.1.45",
- "target": "num_integer"
- },
- {
- "id": "num-rational 0.3.2",
- "target": "build_script_build"
- },
- {
- "id": "num-traits 0.2.15",
- "target": "num_traits"
- }
- ],
- "selects": {}
- },
- "edition": "2018",
- "version": "0.3.2"
- },
- "build_script_attrs": {
- "data_glob": [
- "**"
- ],
- "deps": {
- "common": [
- {
- "id": "autocfg 1.1.0",
- "target": "autocfg"
- }
- ],
- "selects": {}
- }
- },
- "license": "MIT OR Apache-2.0"
- },
- "num-traits 0.2.15": {
- "name": "num-traits",
- "version": "0.2.15",
- "repository": {
- "Http": {
- "url": "https://crates.io/api/v1/crates/num-traits/0.2.15/download",
- "sha256": "578ede34cf02f8924ab9447f50c28075b4d3e5b269972345e7e0372b38c6cdcd"
- }
- },
- "targets": [
- {
- "Library": {
- "crate_name": "num_traits",
- "crate_root": "src/lib.rs",
- "srcs": {
- "include": [
- "**/*.rs"
- ],
- "exclude": []
- }
- }
- },
- {
- "BuildScript": {
- "crate_name": "build_script_build",
- "crate_root": "build.rs",
- "srcs": {
- "include": [
- "**/*.rs"
- ],
- "exclude": []
- }
- }
- }
- ],
- "library_target_name": "num_traits",
- "common_attrs": {
- "compile_data_glob": [
- "**"
- ],
- "crate_features": [
- "default",
- "i128",
- "std"
- ],
- "deps": {
- "common": [
- {
- "id": "num-traits 0.2.15",
- "target": "build_script_build"
- }
- ],
- "selects": {}
- },
- "edition": "2015",
- "version": "0.2.15"
- },
- "build_script_attrs": {
- "data_glob": [
- "**"
- ],
- "deps": {
- "common": [
- {
- "id": "autocfg 1.1.0",
- "target": "autocfg"
- }
- ],
- "selects": {}
- }
- },
- "license": "MIT OR Apache-2.0"
- },
- "num_cpus 1.13.1": {
- "name": "num_cpus",
- "version": "1.13.1",
- "repository": {
- "Http": {
- "url": "https://crates.io/api/v1/crates/num_cpus/1.13.1/download",
- "sha256": "19e64526ebdee182341572e50e9ad03965aa510cd94427a4549448f285e957a1"
- }
- },
- "targets": [
- {
- "Library": {
- "crate_name": "num_cpus",
- "crate_root": "src/lib.rs",
- "srcs": {
- "include": [
- "**/*.rs"
- ],
- "exclude": []
- }
- }
- }
- ],
- "library_target_name": "num_cpus",
- "common_attrs": {
- "compile_data_glob": [
- "**"
- ],
- "deps": {
- "common": [],
- "selects": {
- "cfg(all(any(target_arch = \"x86_64\", target_arch = \"aarch64\"), target_os = \"hermit\"))": [
- {
- "id": "hermit-abi 0.1.19",
- "target": "hermit_abi"
- }
- ],
- "cfg(not(windows))": [
- {
- "id": "libc 0.2.126",
- "target": "libc"
- }
- ]
- }
- },
- "edition": "2015",
- "version": "1.13.1"
- },
- "license": "MIT OR Apache-2.0"
- },
- "number_prefix 0.3.0": {
- "name": "number_prefix",
- "version": "0.3.0",
- "repository": {
- "Http": {
- "url": "https://crates.io/api/v1/crates/number_prefix/0.3.0/download",
- "sha256": "17b02fc0ff9a9e4b35b3342880f48e896ebf69f2967921fe8646bf5b7125956a"
- }
- },
- "targets": [
- {
- "Library": {
- "crate_name": "number_prefix",
- "crate_root": "src/lib.rs",
- "srcs": {
- "include": [
- "**/*.rs"
- ],
- "exclude": []
- }
- }
- }
- ],
- "library_target_name": "number_prefix",
- "common_attrs": {
- "compile_data_glob": [
- "**"
- ],
- "crate_features": [
- "default",
- "std"
- ],
- "edition": "2015",
- "version": "0.3.0"
- },
- "license": "MIT"
- },
- "once_cell 1.12.0": {
- "name": "once_cell",
- "version": "1.12.0",
- "repository": {
- "Http": {
- "url": "https://crates.io/api/v1/crates/once_cell/1.12.0/download",
- "sha256": "7709cef83f0c1f58f666e746a08b21e0085f7440fa6a29cc194d68aac97a4225"
- }
- },
- "targets": [
- {
- "Library": {
- "crate_name": "once_cell",
- "crate_root": "src/lib.rs",
- "srcs": {
- "include": [
- "**/*.rs"
- ],
- "exclude": []
- }
- }
- }
- ],
- "library_target_name": "once_cell",
- "common_attrs": {
- "compile_data_glob": [
- "**"
- ],
- "crate_features": [
- "alloc",
- "default",
- "race",
- "std"
- ],
- "edition": "2018",
- "version": "1.12.0"
- },
- "license": "MIT OR Apache-2.0"
- },
- "pdqselect 0.1.1": {
- "name": "pdqselect",
- "version": "0.1.1",
- "repository": {
- "Http": {
- "url": "https://crates.io/api/v1/crates/pdqselect/0.1.1/download",
- "sha256": "7778906d9321dd56cde1d1ffa69a73e59dcf5fda6d366f62727adf2bd4193aee"
- }
- },
- "targets": [
- {
- "Library": {
- "crate_name": "pdqselect",
- "crate_root": "src/lib.rs",
- "srcs": {
- "include": [
- "**/*.rs"
- ],
- "exclude": []
- }
- }
- }
- ],
- "library_target_name": "pdqselect",
- "common_attrs": {
- "compile_data_glob": [
- "**"
- ],
- "edition": "2021",
- "version": "0.1.1"
- },
- "license": "Apache-2.0/MIT"
- },
- "png 0.16.8": {
- "name": "png",
- "version": "0.16.8",
- "repository": {
- "Http": {
- "url": "https://crates.io/api/v1/crates/png/0.16.8/download",
- "sha256": "3c3287920cb847dee3de33d301c463fba14dda99db24214ddf93f83d3021f4c6"
- }
- },
- "targets": [
- {
- "Library": {
- "crate_name": "png",
- "crate_root": "src/lib.rs",
- "srcs": {
- "include": [
- "**/*.rs"
- ],
- "exclude": []
- }
- }
- }
- ],
- "library_target_name": "png",
- "common_attrs": {
- "compile_data_glob": [
- "**"
- ],
- "crate_features": [
- "default",
- "deflate",
- "png-encoding"
- ],
- "deps": {
- "common": [
- {
- "id": "bitflags 1.3.2",
- "target": "bitflags"
- },
- {
- "id": "crc32fast 1.3.2",
- "target": "crc32fast"
- },
- {
- "id": "deflate 0.8.6",
- "target": "deflate"
- },
- {
- "id": "miniz_oxide 0.3.7",
- "target": "miniz_oxide"
- }
- ],
- "selects": {}
- },
- "edition": "2018",
- "version": "0.16.8"
- },
- "license": "MIT OR Apache-2.0"
- },
- "proc-macro-error 1.0.4": {
- "name": "proc-macro-error",
- "version": "1.0.4",
- "repository": {
- "Http": {
- "url": "https://crates.io/api/v1/crates/proc-macro-error/1.0.4/download",
- "sha256": "da25490ff9892aab3fcf7c36f08cfb902dd3e71ca0f9f9517bea02a73a5ce38c"
- }
- },
- "targets": [
- {
- "Library": {
- "crate_name": "proc_macro_error",
- "crate_root": "src/lib.rs",
- "srcs": {
- "include": [
- "**/*.rs"
- ],
- "exclude": []
- }
- }
- },
- {
- "BuildScript": {
- "crate_name": "build_script_build",
- "crate_root": "build.rs",
- "srcs": {
- "include": [
- "**/*.rs"
- ],
- "exclude": []
- }
- }
- }
- ],
- "library_target_name": "proc_macro_error",
- "common_attrs": {
- "compile_data_glob": [
- "**"
- ],
- "crate_features": [
- "default",
- "syn",
- "syn-error"
- ],
- "deps": {
- "common": [
- {
- "id": "proc-macro-error 1.0.4",
- "target": "build_script_build"
- },
- {
- "id": "proc-macro2 1.0.39",
- "target": "proc_macro2"
- },
- {
- "id": "quote 1.0.18",
- "target": "quote"
- },
- {
- "id": "syn 1.0.95",
- "target": "syn"
- }
- ],
- "selects": {}
- },
- "edition": "2018",
- "proc_macro_deps": {
- "common": [
- {
- "id": "proc-macro-error-attr 1.0.4",
- "target": "proc_macro_error_attr"
- }
- ],
- "selects": {}
- },
- "version": "1.0.4"
- },
- "build_script_attrs": {
- "data_glob": [
- "**"
- ],
- "deps": {
- "common": [
- {
- "id": "version_check 0.9.4",
- "target": "version_check"
- }
- ],
- "selects": {}
- }
- },
- "license": "MIT OR Apache-2.0"
- },
- "proc-macro-error-attr 1.0.4": {
- "name": "proc-macro-error-attr",
- "version": "1.0.4",
- "repository": {
- "Http": {
- "url": "https://crates.io/api/v1/crates/proc-macro-error-attr/1.0.4/download",
- "sha256": "a1be40180e52ecc98ad80b184934baf3d0d29f979574e439af5a55274b35f869"
- }
- },
- "targets": [
- {
- "ProcMacro": {
- "crate_name": "proc_macro_error_attr",
- "crate_root": "src/lib.rs",
- "srcs": {
- "include": [
- "**/*.rs"
- ],
- "exclude": []
- }
- }
- },
- {
- "BuildScript": {
- "crate_name": "build_script_build",
- "crate_root": "build.rs",
- "srcs": {
- "include": [
- "**/*.rs"
- ],
- "exclude": []
- }
- }
- }
- ],
- "library_target_name": "proc_macro_error_attr",
- "common_attrs": {
- "compile_data_glob": [
- "**"
- ],
- "deps": {
- "common": [
- {
- "id": "proc-macro-error-attr 1.0.4",
- "target": "build_script_build"
- },
- {
- "id": "proc-macro2 1.0.39",
- "target": "proc_macro2"
- },
- {
- "id": "quote 1.0.18",
- "target": "quote"
- }
- ],
- "selects": {}
- },
- "edition": "2018",
- "version": "1.0.4"
- },
- "build_script_attrs": {
- "data_glob": [
- "**"
- ],
- "deps": {
- "common": [
- {
- "id": "version_check 0.9.4",
- "target": "version_check"
- }
- ],
- "selects": {}
- }
- },
- "license": "MIT OR Apache-2.0"
- },
- "proc-macro2 1.0.39": {
- "name": "proc-macro2",
- "version": "1.0.39",
- "repository": {
- "Http": {
- "url": "https://crates.io/api/v1/crates/proc-macro2/1.0.39/download",
- "sha256": "c54b25569025b7fc9651de43004ae593a75ad88543b17178aa5e1b9c4f15f56f"
- }
- },
- "targets": [
- {
- "Library": {
- "crate_name": "proc_macro2",
- "crate_root": "src/lib.rs",
- "srcs": {
- "include": [
- "**/*.rs"
- ],
- "exclude": []
- }
- }
- },
- {
- "BuildScript": {
- "crate_name": "build_script_build",
- "crate_root": "build.rs",
- "srcs": {
- "include": [
- "**/*.rs"
- ],
- "exclude": []
- }
- }
- }
- ],
- "library_target_name": "proc_macro2",
- "common_attrs": {
- "compile_data_glob": [
- "**"
- ],
- "crate_features": [
- "default",
- "proc-macro"
- ],
- "deps": {
- "common": [
- {
- "id": "proc-macro2 1.0.39",
- "target": "build_script_build"
- },
- {
- "id": "unicode-ident 1.0.0",
- "target": "unicode_ident"
- }
- ],
- "selects": {}
- },
- "edition": "2018",
- "version": "1.0.39"
- },
- "build_script_attrs": {
- "data_glob": [
- "**"
- ]
- },
- "license": "MIT OR Apache-2.0"
- },
- "quote 1.0.18": {
- "name": "quote",
- "version": "1.0.18",
- "repository": {
- "Http": {
- "url": "https://crates.io/api/v1/crates/quote/1.0.18/download",
- "sha256": "a1feb54ed693b93a84e14094943b84b7c4eae204c512b7ccb95ab0c66d278ad1"
- }
- },
- "targets": [
- {
- "Library": {
- "crate_name": "quote",
- "crate_root": "src/lib.rs",
- "srcs": {
- "include": [
- "**/*.rs"
- ],
- "exclude": []
- }
- }
- }
- ],
- "library_target_name": "quote",
- "common_attrs": {
- "compile_data_glob": [
- "**"
- ],
- "crate_features": [
- "default",
- "proc-macro"
- ],
- "deps": {
- "common": [
- {
- "id": "proc-macro2 1.0.39",
- "target": "proc_macro2"
- }
- ],
- "selects": {}
- },
- "edition": "2018",
- "version": "1.0.18"
- },
- "license": "MIT OR Apache-2.0"
- },
- "rand 0.8.5": {
- "name": "rand",
- "version": "0.8.5",
- "repository": {
- "Http": {
- "url": "https://crates.io/api/v1/crates/rand/0.8.5/download",
- "sha256": "34af8d1a0e25924bc5b7c43c079c942339d8f0a8b57c39049bef581b46327404"
- }
- },
- "targets": [
- {
- "Library": {
- "crate_name": "rand",
- "crate_root": "src/lib.rs",
- "srcs": {
- "include": [
- "**/*.rs"
- ],
- "exclude": []
- }
- }
- }
- ],
- "library_target_name": "rand",
- "common_attrs": {
- "compile_data_glob": [
- "**"
- ],
- "deps": {
- "common": [
- {
- "id": "rand_core 0.6.3",
- "target": "rand_core"
- }
- ],
- "selects": {}
- },
- "edition": "2018",
- "version": "0.8.5"
- },
- "license": "MIT OR Apache-2.0"
- },
- "rand_core 0.6.3": {
- "name": "rand_core",
- "version": "0.6.3",
- "repository": {
- "Http": {
- "url": "https://crates.io/api/v1/crates/rand_core/0.6.3/download",
- "sha256": "d34f1408f55294453790c48b2f1ebbb1c5b4b7563eb1f418bcfcfdbb06ebb4e7"
- }
- },
- "targets": [
- {
- "Library": {
- "crate_name": "rand_core",
- "crate_root": "src/lib.rs",
- "srcs": {
- "include": [
- "**/*.rs"
- ],
- "exclude": []
- }
- }
- }
- ],
- "library_target_name": "rand_core",
- "common_attrs": {
- "compile_data_glob": [
- "**"
- ],
- "edition": "2018",
- "version": "0.6.3"
- },
- "license": "MIT OR Apache-2.0"
- },
- "rand_pcg 0.3.1": {
- "name": "rand_pcg",
- "version": "0.3.1",
- "repository": {
- "Http": {
- "url": "https://crates.io/api/v1/crates/rand_pcg/0.3.1/download",
- "sha256": "59cad018caf63deb318e5a4586d99a24424a364f40f1e5778c29aca23f4fc73e"
- }
- },
- "targets": [
- {
- "Library": {
- "crate_name": "rand_pcg",
- "crate_root": "src/lib.rs",
- "srcs": {
- "include": [
- "**/*.rs"
- ],
- "exclude": []
- }
- }
- }
- ],
- "library_target_name": "rand_pcg",
- "common_attrs": {
- "compile_data_glob": [
- "**"
- ],
- "deps": {
- "common": [
- {
- "id": "rand_core 0.6.3",
- "target": "rand_core"
- }
- ],
- "selects": {}
- },
- "edition": "2018",
- "version": "0.3.1"
- },
- "license": "MIT OR Apache-2.0"
- },
- "regex 1.5.6": {
- "name": "regex",
- "version": "1.5.6",
- "repository": {
- "Http": {
- "url": "https://crates.io/api/v1/crates/regex/1.5.6/download",
- "sha256": "d83f127d94bdbcda4c8cc2e50f6f84f4b611f69c902699ca385a39c3a75f9ff1"
- }
- },
- "targets": [
- {
- "Library": {
- "crate_name": "regex",
- "crate_root": "src/lib.rs",
- "srcs": {
- "include": [
- "**/*.rs"
- ],
- "exclude": []
- }
- }
- }
- ],
- "library_target_name": "regex",
- "common_attrs": {
- "compile_data_glob": [
- "**"
- ],
- "crate_features": [
- "std"
- ],
- "deps": {
- "common": [
- {
- "id": "regex-syntax 0.6.26",
- "target": "regex_syntax"
- }
- ],
- "selects": {}
- },
- "edition": "2018",
- "version": "1.5.6"
- },
- "license": "MIT OR Apache-2.0"
- },
- "regex-syntax 0.6.26": {
- "name": "regex-syntax",
- "version": "0.6.26",
- "repository": {
- "Http": {
- "url": "https://crates.io/api/v1/crates/regex-syntax/0.6.26/download",
- "sha256": "49b3de9ec5dc0a3417da371aab17d729997c15010e7fd24ff707773a33bddb64"
- }
- },
- "targets": [
- {
- "Library": {
- "crate_name": "regex_syntax",
- "crate_root": "src/lib.rs",
- "srcs": {
- "include": [
- "**/*.rs"
- ],
- "exclude": []
- }
- }
- }
- ],
- "library_target_name": "regex_syntax",
- "common_attrs": {
- "compile_data_glob": [
- "**"
- ],
- "edition": "2018",
- "version": "0.6.26"
- },
- "license": "MIT OR Apache-2.0"
- },
- "rstar 0.7.1": {
- "name": "rstar",
- "version": "0.7.1",
- "repository": {
- "Http": {
- "url": "https://crates.io/api/v1/crates/rstar/0.7.1/download",
- "sha256": "0650eaaa56cbd1726fd671150fce8ac6ed9d9a25d1624430d7ee9d196052f6b6"
- }
- },
- "targets": [
- {
- "Library": {
- "crate_name": "rstar",
- "crate_root": "src/lib.rs",
- "srcs": {
- "include": [
- "**/*.rs"
- ],
- "exclude": []
- }
- }
- }
- ],
- "library_target_name": "rstar",
- "common_attrs": {
- "compile_data_glob": [
- "**"
- ],
- "crate_features": [
- "default"
- ],
- "deps": {
- "common": [
- {
- "id": "num-traits 0.2.15",
- "target": "num_traits"
- },
- {
- "id": "pdqselect 0.1.1",
- "target": "pdqselect"
- }
- ],
- "selects": {}
- },
- "edition": "2018",
- "version": "0.7.1"
- },
- "license": "MIT/Apache-2.0"
- },
- "smallvec 0.4.5": {
- "name": "smallvec",
- "version": "0.4.5",
- "repository": {
- "Http": {
- "url": "https://crates.io/api/v1/crates/smallvec/0.4.5/download",
- "sha256": "f90c5e5fe535e48807ab94fc611d323935f39d4660c52b26b96446a7b33aef10"
- }
- },
- "targets": [
- {
- "Library": {
- "crate_name": "smallvec",
- "crate_root": "lib.rs",
- "srcs": {
- "include": [
- "**/*.rs"
- ],
- "exclude": []
- }
- }
- }
- ],
- "library_target_name": "smallvec",
- "common_attrs": {
- "compile_data_glob": [
- "**"
- ],
- "crate_features": [
- "default",
- "std"
- ],
- "edition": "2015",
- "version": "0.4.5"
- },
- "license": "MPL-2.0"
- },
- "smawk 0.3.1": {
- "name": "smawk",
- "version": "0.3.1",
- "repository": {
- "Http": {
- "url": "https://crates.io/api/v1/crates/smawk/0.3.1/download",
- "sha256": "f67ad224767faa3c7d8b6d91985b78e70a1324408abcb1cfcc2be4c06bc06043"
- }
- },
- "targets": [
- {
- "Library": {
- "crate_name": "smawk",
- "crate_root": "src/lib.rs",
- "srcs": {
- "include": [
- "**/*.rs"
- ],
- "exclude": []
- }
- }
- }
- ],
- "library_target_name": "smawk",
- "common_attrs": {
- "compile_data_glob": [
- "**"
- ],
- "edition": "2018",
- "version": "0.3.1"
- },
- "license": "MIT"
- },
- "strsim 0.8.0": {
- "name": "strsim",
- "version": "0.8.0",
- "repository": {
- "Http": {
- "url": "https://crates.io/api/v1/crates/strsim/0.8.0/download",
- "sha256": "8ea5119cdb4c55b55d432abb513a0429384878c15dde60cc77b1c99de1a95a6a"
- }
- },
- "targets": [
- {
- "Library": {
- "crate_name": "strsim",
- "crate_root": "src/lib.rs",
- "srcs": {
- "include": [
- "**/*.rs"
- ],
- "exclude": []
- }
- }
- }
- ],
- "library_target_name": "strsim",
- "common_attrs": {
- "compile_data_glob": [
- "**"
- ],
- "edition": "2015",
- "version": "0.8.0"
- },
- "license": "MIT"
- },
- "structopt 0.3.26": {
- "name": "structopt",
- "version": "0.3.26",
- "repository": {
- "Http": {
- "url": "https://crates.io/api/v1/crates/structopt/0.3.26/download",
- "sha256": "0c6b5c64445ba8094a6ab0c3cd2ad323e07171012d9c98b0b15651daf1787a10"
- }
- },
- "targets": [
- {
- "Library": {
- "crate_name": "structopt",
- "crate_root": "src/lib.rs",
- "srcs": {
- "include": [
- "**/*.rs"
- ],
- "exclude": []
- }
- }
- }
- ],
- "library_target_name": "structopt",
- "common_attrs": {
- "compile_data_glob": [
- "**"
- ],
- "crate_features": [
- "default"
- ],
- "deps": {
- "common": [
- {
- "id": "clap 2.34.0",
- "target": "clap"
- },
- {
- "id": "lazy_static 1.4.0",
- "target": "lazy_static"
- }
- ],
- "selects": {}
- },
- "edition": "2018",
- "proc_macro_deps": {
- "common": [
- {
- "id": "structopt-derive 0.4.18",
- "target": "structopt_derive"
- }
- ],
- "selects": {}
- },
- "version": "0.3.26"
- },
- "license": "Apache-2.0 OR MIT"
- },
- "structopt-derive 0.4.18": {
- "name": "structopt-derive",
- "version": "0.4.18",
- "repository": {
- "Http": {
- "url": "https://crates.io/api/v1/crates/structopt-derive/0.4.18/download",
- "sha256": "dcb5ae327f9cc13b68763b5749770cb9e048a99bd9dfdfa58d0cf05d5f64afe0"
- }
- },
- "targets": [
- {
- "ProcMacro": {
- "crate_name": "structopt_derive",
- "crate_root": "src/lib.rs",
- "srcs": {
- "include": [
- "**/*.rs"
- ],
- "exclude": []
- }
- }
- }
- ],
- "library_target_name": "structopt_derive",
- "common_attrs": {
- "compile_data_glob": [
- "**"
- ],
- "deps": {
- "common": [
- {
- "id": "heck 0.3.3",
- "target": "heck"
- },
- {
- "id": "proc-macro-error 1.0.4",
- "target": "proc_macro_error"
- },
- {
- "id": "proc-macro2 1.0.39",
- "target": "proc_macro2"
- },
- {
- "id": "quote 1.0.18",
- "target": "quote"
- },
- {
- "id": "syn 1.0.95",
- "target": "syn"
- }
- ],
- "selects": {}
- },
- "edition": "2018",
- "version": "0.4.18"
- },
- "license": "Apache-2.0/MIT"
- },
- "syn 1.0.95": {
- "name": "syn",
- "version": "1.0.95",
- "repository": {
- "Http": {
- "url": "https://crates.io/api/v1/crates/syn/1.0.95/download",
- "sha256": "fbaf6116ab8924f39d52792136fb74fd60a80194cf1b1c6ffa6453eef1c3f942"
- }
- },
- "targets": [
- {
- "Library": {
- "crate_name": "syn",
- "crate_root": "src/lib.rs",
- "srcs": {
- "include": [
- "**/*.rs"
- ],
- "exclude": []
- }
- }
- },
- {
- "BuildScript": {
- "crate_name": "build_script_build",
- "crate_root": "build.rs",
- "srcs": {
- "include": [
- "**/*.rs"
- ],
- "exclude": []
- }
- }
- }
- ],
- "library_target_name": "syn",
- "common_attrs": {
- "compile_data_glob": [
- "**"
- ],
- "crate_features": [
- "clone-impls",
- "default",
- "derive",
- "full",
- "parsing",
- "printing",
- "proc-macro",
- "quote"
- ],
- "deps": {
- "common": [
- {
- "id": "proc-macro2 1.0.39",
- "target": "proc_macro2"
- },
- {
- "id": "quote 1.0.18",
- "target": "quote"
- },
- {
- "id": "syn 1.0.95",
- "target": "build_script_build"
- },
- {
- "id": "unicode-ident 1.0.0",
- "target": "unicode_ident"
- }
- ],
- "selects": {}
- },
- "edition": "2018",
- "version": "1.0.95"
- },
- "build_script_attrs": {
- "data_glob": [
- "**"
- ]
- },
- "license": "MIT OR Apache-2.0"
- },
- "terminal_size 0.1.17": {
- "name": "terminal_size",
- "version": "0.1.17",
- "repository": {
- "Http": {
- "url": "https://crates.io/api/v1/crates/terminal_size/0.1.17/download",
- "sha256": "633c1a546cee861a1a6d0dc69ebeca693bf4296661ba7852b9d21d159e0506df"
- }
- },
- "targets": [
- {
- "Library": {
- "crate_name": "terminal_size",
- "crate_root": "src/lib.rs",
- "srcs": {
- "include": [
- "**/*.rs"
- ],
- "exclude": []
- }
- }
- }
- ],
- "library_target_name": "terminal_size",
- "common_attrs": {
- "compile_data_glob": [
- "**"
- ],
- "deps": {
- "common": [],
- "selects": {
- "cfg(not(windows))": [
- {
- "id": "libc 0.2.126",
- "target": "libc"
- }
- ],
- "cfg(windows)": [
- {
- "id": "winapi 0.3.9",
- "target": "winapi"
- }
- ]
- }
- },
- "edition": "2018",
- "version": "0.1.17"
- },
- "license": "MIT OR Apache-2.0"
- },
- "texture-synthesis 0.8.2": {
- "name": "texture-synthesis",
- "version": "0.8.2",
- "repository": {
- "Http": {
- "url": "https://crates.io/api/v1/crates/texture-synthesis/0.8.2/download",
- "sha256": "62ff62ae485126fec4f3685ced13a1700afb6f6ea12a1a0dec410ebc5dc9378b"
- }
- },
- "targets": [
- {
- "Library": {
- "crate_name": "texture_synthesis",
- "crate_root": "src/lib.rs",
- "srcs": {
- "include": [
- "**/*.rs"
- ],
- "exclude": []
- }
- }
- }
- ],
- "library_target_name": "texture_synthesis",
- "common_attrs": {
- "compile_data_glob": [
- "**"
- ],
- "deps": {
- "common": [
- {
- "id": "image 0.23.12",
- "target": "image"
- },
- {
- "id": "num_cpus 1.13.1",
- "target": "num_cpus"
- },
- {
- "id": "rand 0.8.5",
- "target": "rand"
- },
- {
- "id": "rand_pcg 0.3.1",
- "target": "rand_pcg"
- },
- {
- "id": "rstar 0.7.1",
- "target": "rstar"
- }
- ],
- "selects": {
- "cfg(not(target_arch = \"wasm32\"))": [
- {
- "id": "crossbeam-utils 0.8.8",
- "target": "crossbeam_utils"
- }
- ]
- }
- },
- "edition": "2018",
- "version": "0.8.2"
- },
- "license": "MIT OR Apache-2.0"
- },
- "texture-synthesis-cli 0.8.2": {
- "name": "texture-synthesis-cli",
- "version": "0.8.2",
- "repository": {
- "Http": {
- "url": "https://crates.io/api/v1/crates/texture-synthesis-cli/0.8.2/download",
- "sha256": "a7dbdf13f5e6f214750fce1073279b71ce3076157a8d337c9b0f0e14334e2aec"
- }
- },
- "targets": [
- {
- "Binary": {
- "crate_name": "texture-synthesis",
- "crate_root": "src/main.rs",
- "srcs": {
- "include": [
- "**/*.rs"
- ],
- "exclude": []
- }
- }
- }
- ],
- "library_target_name": null,
- "common_attrs": {
- "compile_data_glob": [
- "**"
- ],
- "crate_features": [
- "default"
- ],
- "deps": {
- "common": [
- {
- "id": "structopt 0.3.26",
- "target": "structopt"
- },
- {
- "id": "texture-synthesis 0.8.2",
- "target": "texture_synthesis"
- }
- ],
- "selects": {
- "cfg(not(target_arch = \"wasm32\"))": [
- {
- "id": "atty 0.2.14",
- "target": "atty"
- },
- {
- "id": "indicatif 0.15.0",
- "target": "indicatif"
- }
- ]
- }
- },
- "edition": "2018",
- "version": "0.8.2"
- },
- "license": "MIT OR Apache-2.0"
- },
- "textwrap 0.11.0": {
- "name": "textwrap",
- "version": "0.11.0",
- "repository": {
- "Http": {
- "url": "https://crates.io/api/v1/crates/textwrap/0.11.0/download",
- "sha256": "d326610f408c7a4eb6f51c37c330e496b08506c9457c9d34287ecc38809fb060"
- }
- },
- "targets": [
- {
- "Library": {
- "crate_name": "textwrap",
- "crate_root": "src/lib.rs",
- "srcs": {
- "include": [
- "**/*.rs"
- ],
- "exclude": []
- }
- }
- }
- ],
- "library_target_name": "textwrap",
- "common_attrs": {
- "compile_data_glob": [
- "**"
- ],
- "deps": {
- "common": [
- {
- "id": "unicode-width 0.1.9",
- "target": "unicode_width"
- }
- ],
- "selects": {}
- },
- "edition": "2015",
- "version": "0.11.0"
- },
- "license": "MIT"
- },
- "textwrap 0.13.4": {
- "name": "textwrap",
- "version": "0.13.4",
- "repository": {
- "Http": {
- "url": "https://crates.io/api/v1/crates/textwrap/0.13.4/download",
- "sha256": "cd05616119e612a8041ef58f2b578906cc2531a6069047ae092cfb86a325d835"
- }
- },
- "targets": [
- {
- "Library": {
- "crate_name": "textwrap",
- "crate_root": "src/lib.rs",
- "srcs": {
- "include": [
- "**/*.rs"
- ],
- "exclude": []
- }
- }
- }
- ],
- "library_target_name": "textwrap",
- "common_attrs": {
- "compile_data_glob": [
- "**"
- ],
- "crate_features": [
- "default",
- "smawk",
- "unicode-width"
- ],
- "deps": {
- "common": [
- {
- "id": "smawk 0.3.1",
- "target": "smawk"
- },
- {
- "id": "unicode-width 0.1.9",
- "target": "unicode_width"
- }
- ],
- "selects": {}
- },
- "edition": "2018",
- "version": "0.13.4"
- },
- "license": "MIT"
- },
- "unicode-ident 1.0.0": {
- "name": "unicode-ident",
- "version": "1.0.0",
- "repository": {
- "Http": {
- "url": "https://crates.io/api/v1/crates/unicode-ident/1.0.0/download",
- "sha256": "d22af068fba1eb5edcb4aea19d382b2a3deb4c8f9d475c589b6ada9e0fd493ee"
- }
- },
- "targets": [
- {
- "Library": {
- "crate_name": "unicode_ident",
- "crate_root": "src/lib.rs",
- "srcs": {
- "include": [
- "**/*.rs"
- ],
- "exclude": []
- }
- }
- }
- ],
- "library_target_name": "unicode_ident",
- "common_attrs": {
- "compile_data_glob": [
- "**"
- ],
- "edition": "2018",
- "version": "1.0.0"
- },
- "license": "MIT OR Apache-2.0"
- },
- "unicode-segmentation 1.9.0": {
- "name": "unicode-segmentation",
- "version": "1.9.0",
- "repository": {
- "Http": {
- "url": "https://crates.io/api/v1/crates/unicode-segmentation/1.9.0/download",
- "sha256": "7e8820f5d777f6224dc4be3632222971ac30164d4a258d595640799554ebfd99"
- }
- },
- "targets": [
- {
- "Library": {
- "crate_name": "unicode_segmentation",
- "crate_root": "src/lib.rs",
- "srcs": {
- "include": [
- "**/*.rs"
- ],
- "exclude": []
- }
- }
- }
- ],
- "library_target_name": "unicode_segmentation",
- "common_attrs": {
- "compile_data_glob": [
- "**"
- ],
- "edition": "2018",
- "version": "1.9.0"
- },
- "license": "MIT/Apache-2.0"
- },
- "unicode-width 0.1.9": {
- "name": "unicode-width",
- "version": "0.1.9",
- "repository": {
- "Http": {
- "url": "https://crates.io/api/v1/crates/unicode-width/0.1.9/download",
- "sha256": "3ed742d4ea2bd1176e236172c8429aaf54486e7ac098db29ffe6529e0ce50973"
- }
- },
- "targets": [
- {
- "Library": {
- "crate_name": "unicode_width",
- "crate_root": "src/lib.rs",
- "srcs": {
- "include": [
- "**/*.rs"
- ],
- "exclude": []
- }
- }
- }
- ],
- "library_target_name": "unicode_width",
- "common_attrs": {
- "compile_data_glob": [
- "**"
- ],
- "crate_features": [
- "default"
- ],
- "edition": "2015",
- "version": "0.1.9"
- },
- "license": "MIT/Apache-2.0"
- },
- "vec_map 0.8.2": {
- "name": "vec_map",
- "version": "0.8.2",
- "repository": {
- "Http": {
- "url": "https://crates.io/api/v1/crates/vec_map/0.8.2/download",
- "sha256": "f1bddf1187be692e79c5ffeab891132dfb0f236ed36a43c7ed39f1165ee20191"
- }
- },
- "targets": [
- {
- "Library": {
- "crate_name": "vec_map",
- "crate_root": "src/lib.rs",
- "srcs": {
- "include": [
- "**/*.rs"
- ],
- "exclude": []
- }
- }
- }
- ],
- "library_target_name": "vec_map",
- "common_attrs": {
- "compile_data_glob": [
- "**"
- ],
- "edition": "2015",
- "version": "0.8.2"
- },
- "license": "MIT/Apache-2.0"
- },
- "version_check 0.9.4": {
- "name": "version_check",
- "version": "0.9.4",
- "repository": {
- "Http": {
- "url": "https://crates.io/api/v1/crates/version_check/0.9.4/download",
- "sha256": "49874b5167b65d7193b8aba1567f5c7d93d001cafc34600cee003eda787e483f"
- }
- },
- "targets": [
- {
- "Library": {
- "crate_name": "version_check",
- "crate_root": "src/lib.rs",
- "srcs": {
- "include": [
- "**/*.rs"
- ],
- "exclude": []
- }
- }
- }
- ],
- "library_target_name": "version_check",
- "common_attrs": {
- "compile_data_glob": [
- "**"
- ],
- "edition": "2015",
- "version": "0.9.4"
- },
- "license": "MIT/Apache-2.0"
- },
- "winapi 0.3.9": {
- "name": "winapi",
- "version": "0.3.9",
- "repository": {
- "Http": {
- "url": "https://crates.io/api/v1/crates/winapi/0.3.9/download",
- "sha256": "5c839a674fcd7a98952e593242ea400abe93992746761e38641405d28b00f419"
- }
- },
- "targets": [
- {
- "Library": {
- "crate_name": "winapi",
- "crate_root": "src/lib.rs",
- "srcs": {
- "include": [
- "**/*.rs"
- ],
- "exclude": []
- }
- }
- },
- {
- "BuildScript": {
- "crate_name": "build_script_build",
- "crate_root": "build.rs",
- "srcs": {
- "include": [
- "**/*.rs"
- ],
- "exclude": []
- }
- }
- }
- ],
- "library_target_name": "winapi",
- "common_attrs": {
- "compile_data_glob": [
- "**"
- ],
- "crate_features": [
- "consoleapi",
- "errhandlingapi",
- "fileapi",
- "handleapi",
- "minwinbase",
- "minwindef",
- "processenv",
- "winbase",
- "wincon",
- "winnt",
- "winuser"
- ],
- "deps": {
- "common": [
- {
- "id": "winapi 0.3.9",
- "target": "build_script_build"
- }
- ],
- "selects": {
- "i686-pc-windows-gnu": [
- {
- "id": "winapi-i686-pc-windows-gnu 0.4.0",
- "target": "winapi_i686_pc_windows_gnu"
- }
- ],
- "x86_64-pc-windows-gnu": [
- {
- "id": "winapi-x86_64-pc-windows-gnu 0.4.0",
- "target": "winapi_x86_64_pc_windows_gnu"
- }
- ]
- }
- },
- "edition": "2015",
- "version": "0.3.9"
- },
- "build_script_attrs": {
- "data_glob": [
- "**"
- ]
- },
- "license": "MIT/Apache-2.0"
- },
- "winapi-i686-pc-windows-gnu 0.4.0": {
- "name": "winapi-i686-pc-windows-gnu",
- "version": "0.4.0",
- "repository": {
- "Http": {
- "url": "https://crates.io/api/v1/crates/winapi-i686-pc-windows-gnu/0.4.0/download",
- "sha256": "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6"
- }
- },
- "targets": [
- {
- "Library": {
- "crate_name": "winapi_i686_pc_windows_gnu",
- "crate_root": "src/lib.rs",
- "srcs": {
- "include": [
- "**/*.rs"
- ],
- "exclude": []
- }
- }
- },
- {
- "BuildScript": {
- "crate_name": "build_script_build",
- "crate_root": "build.rs",
- "srcs": {
- "include": [
- "**/*.rs"
- ],
- "exclude": []
- }
- }
- }
- ],
- "library_target_name": "winapi_i686_pc_windows_gnu",
- "common_attrs": {
- "compile_data_glob": [
- "**"
- ],
- "deps": {
- "common": [
- {
- "id": "winapi-i686-pc-windows-gnu 0.4.0",
- "target": "build_script_build"
- }
- ],
- "selects": {}
- },
- "edition": "2015",
- "version": "0.4.0"
- },
- "build_script_attrs": {
- "data_glob": [
- "**"
- ]
- },
- "license": "MIT/Apache-2.0"
- },
- "winapi-x86_64-pc-windows-gnu 0.4.0": {
- "name": "winapi-x86_64-pc-windows-gnu",
- "version": "0.4.0",
- "repository": {
- "Http": {
- "url": "https://crates.io/api/v1/crates/winapi-x86_64-pc-windows-gnu/0.4.0/download",
- "sha256": "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f"
- }
- },
- "targets": [
- {
- "Library": {
- "crate_name": "winapi_x86_64_pc_windows_gnu",
- "crate_root": "src/lib.rs",
- "srcs": {
- "include": [
- "**/*.rs"
- ],
- "exclude": []
- }
- }
- },
- {
- "BuildScript": {
- "crate_name": "build_script_build",
- "crate_root": "build.rs",
- "srcs": {
- "include": [
- "**/*.rs"
- ],
- "exclude": []
- }
- }
- }
- ],
- "library_target_name": "winapi_x86_64_pc_windows_gnu",
- "common_attrs": {
- "compile_data_glob": [
- "**"
- ],
- "deps": {
- "common": [
- {
- "id": "winapi-x86_64-pc-windows-gnu 0.4.0",
- "target": "build_script_build"
- }
- ],
- "selects": {}
- },
- "edition": "2015",
- "version": "0.4.0"
- },
- "build_script_attrs": {
- "data_glob": [
- "**"
- ]
- },
- "license": "MIT/Apache-2.0"
- }
- },
- "binary_crates": [
- "texture-synthesis-cli 0.8.2"
- ],
- "workspace_members": {
- "extra_workspace_members 0.1.0": "extra_workspace_members"
- },
- "conditions": {
- "cfg(all(any(target_arch = \"x86_64\", target_arch = \"aarch64\"), target_os = \"hermit\"))": [],
- "cfg(not(target_arch = \"wasm32\"))": [
- "aarch64-apple-darwin",
- "aarch64-apple-ios",
- "aarch64-apple-ios-sim",
- "aarch64-linux-android",
- "aarch64-unknown-linux-gnu",
- "arm-unknown-linux-gnueabi",
- "armv7-linux-androideabi",
- "armv7-unknown-linux-gnueabi",
- "i686-apple-darwin",
- "i686-linux-android",
- "i686-pc-windows-msvc",
- "i686-unknown-freebsd",
- "i686-unknown-linux-gnu",
- "powerpc-unknown-linux-gnu",
- "riscv32imc-unknown-none-elf",
- "s390x-unknown-linux-gnu",
- "x86_64-apple-darwin",
- "x86_64-apple-ios",
- "x86_64-linux-android",
- "x86_64-pc-windows-msvc",
- "x86_64-unknown-freebsd",
- "x86_64-unknown-linux-gnu"
- ],
- "cfg(not(windows))": [
- "aarch64-apple-darwin",
- "aarch64-apple-ios",
- "aarch64-apple-ios-sim",
- "aarch64-linux-android",
- "aarch64-unknown-linux-gnu",
- "arm-unknown-linux-gnueabi",
- "armv7-linux-androideabi",
- "armv7-unknown-linux-gnueabi",
- "i686-apple-darwin",
- "i686-linux-android",
- "i686-unknown-freebsd",
- "i686-unknown-linux-gnu",
- "powerpc-unknown-linux-gnu",
- "riscv32imc-unknown-none-elf",
- "s390x-unknown-linux-gnu",
- "wasm32-unknown-unknown",
- "wasm32-wasi",
- "x86_64-apple-darwin",
- "x86_64-apple-ios",
- "x86_64-linux-android",
- "x86_64-unknown-freebsd",
- "x86_64-unknown-linux-gnu"
- ],
- "cfg(target_os = \"hermit\")": [],
- "cfg(target_os = \"windows\")": [
- "i686-pc-windows-msvc",
- "x86_64-pc-windows-msvc"
- ],
- "cfg(unix)": [
- "aarch64-apple-darwin",
- "aarch64-apple-ios",
- "aarch64-apple-ios-sim",
- "aarch64-linux-android",
- "aarch64-unknown-linux-gnu",
- "arm-unknown-linux-gnueabi",
- "armv7-linux-androideabi",
- "armv7-unknown-linux-gnueabi",
- "i686-apple-darwin",
- "i686-linux-android",
- "i686-unknown-freebsd",
- "i686-unknown-linux-gnu",
- "powerpc-unknown-linux-gnu",
- "s390x-unknown-linux-gnu",
- "x86_64-apple-darwin",
- "x86_64-apple-ios",
- "x86_64-linux-android",
- "x86_64-unknown-freebsd",
- "x86_64-unknown-linux-gnu"
- ],
- "cfg(windows)": [
- "i686-pc-windows-msvc",
- "x86_64-pc-windows-msvc"
- ],
- "i686-pc-windows-gnu": [],
- "x86_64-pc-windows-gnu": []
- }
-}
diff --git a/examples/crate_universe/extra_workspace_members/Cargo.toml b/examples/crate_universe/extra_workspace_members/Cargo.toml
deleted file mode 100644
index 2577506..0000000
--- a/examples/crate_universe/extra_workspace_members/Cargo.toml
+++ /dev/null
@@ -1,11 +0,0 @@
-[package]
-name = "extra_workspace_members"
-version = "0.1.0"
-authors = ["UebelAndre <github@uebelandre.com>"]
-
-[[bin]]
-name = "extra_workspace_members"
-path = "src/main.rs"
-
-[dependencies]
-ferris-says = "0.2.1"
diff --git a/examples/crate_universe/extra_workspace_members/src/main.rs b/examples/crate_universe/extra_workspace_members/src/main.rs
deleted file mode 100644
index 0f2fffe..0000000
--- a/examples/crate_universe/extra_workspace_members/src/main.rs
+++ /dev/null
@@ -1,39 +0,0 @@
-use std::io::{stdout, BufWriter};
-use std::path::Path;
-use std::process::Command;
-
-fn execute_texture_synthesis() -> Vec<u8> {
- let texture_synthesis_path = Path::new(env!("TEXTURE_SYNTHESIS_CLI"));
-
- let output = Command::new(texture_synthesis_path)
- .arg("--help")
- .output()
- .unwrap();
-
- if !output.status.success() {
- panic!("Execution of texter-synthesis-cli failed")
- }
-
- output.stdout
-}
-
-fn main() {
- // Run the command
- let output = execute_texture_synthesis();
-
- // Print the results
- let mut writer = BufWriter::new(stdout());
- ferris_says::say(&output, 120, &mut writer).unwrap();
-}
-
-#[cfg(test)]
-mod test {
- use super::*;
-
- #[test]
- fn test_output() {
- let stdout = execute_texture_synthesis();
- let text = String::from_utf8(stdout).unwrap();
- assert!(text.contains("Synthesizes images based on example images"));
- }
-}