Struct cargo_test_support::registry::Package
source · pub struct Package { /* private fields */ }
Expand description
A builder for creating a new package in a registry.
This uses “source replacement” using an automatically generated
.cargo/config
file to ensure that dependencies will use these packages
instead of contacting crates.io. See source-replacement.md
for more
details on how source replacement works.
Call publish
to finalize and create the package.
If no files are specified, an empty lib.rs
file is automatically created.
The Cargo.toml
file is automatically generated based on the methods
called on Package
(for example, calling dep()
will add to the
[dependencies]
automatically). You may also specify a Cargo.toml
file
to override the generated one.
This supports different registry types:
- Regular source replacement that replaces
crates.io
(the default). - A “local registry” which is a subset for vendoring (see
Package::local
). - An “alternative registry” which requires specifying the registry name
(see
Package::alternative
).
This does not support “directory sources”. See directory.rs
for
VendorPackage
which implements directory sources.
§Example
use cargo_test_support::registry::Package;
use cargo_test_support::project;
// Publish package "a" depending on "b".
Package::new("a", "1.0.0")
.dep("b", "1.0.0")
.file("src/lib.rs", r#"
extern crate b;
pub fn f() -> i32 { b::f() * 2 }
"#)
.publish();
// Publish package "b".
Package::new("b", "1.0.0")
.file("src/lib.rs", r#"
pub fn f() -> i32 { 12 }
"#)
.publish();
// Create a project that uses package "a".
let p = project()
.file("Cargo.toml", r#"
[package]
name = "foo"
version = "0.0.1"
[dependencies]
a = "1.0"
"#)
.file("src/main.rs", r#"
extern crate a;
fn main() { println!("{}", a::f()); }
"#)
.build();
p.cargo("run").with_stdout("24").run();
Implementations§
source§impl Package
impl Package
sourcepub fn new(name: &str, vers: &str) -> Package
pub fn new(name: &str, vers: &str) -> Package
Creates a new package builder.
Call publish()
to finalize and build the package.
sourcepub fn local(&mut self, local: bool) -> &mut Package
pub fn local(&mut self, local: bool) -> &mut Package
Call with true
to publish in a “local registry”.
See source-replacement.html#local-registry-sources
for more details
on local registries. See local_registry.rs
for the tests that use
this.
sourcepub fn alternative(&mut self, alternative: bool) -> &mut Package
pub fn alternative(&mut self, alternative: bool) -> &mut Package
Call with true
to publish in an “alternative registry”.
The name of the alternative registry is called “alternative”.
See src/doc/src/reference/registries.md
for more details on
alternative registries. See alt_registry.rs
for the tests that use
this.
sourcepub fn file_with_mode(
&mut self,
path: &str,
mode: u32,
contents: &str,
) -> &mut Package
pub fn file_with_mode( &mut self, path: &str, mode: u32, contents: &str, ) -> &mut Package
Adds a file with a specific Unix mode.
sourcepub fn symlink(&mut self, dst: &str, src: &str) -> &mut Package
pub fn symlink(&mut self, dst: &str, src: &str) -> &mut Package
Adds a symlink to a path to the package.
sourcepub fn extra_file(&mut self, path: &str, contents: &str) -> &mut Package
pub fn extra_file(&mut self, path: &str, contents: &str) -> &mut Package
Adds an “extra” file that is not rooted within the package.
Normal files are automatically placed within a directory named
$PACKAGE-$VERSION
. This allows you to override that behavior,
typically for testing invalid behavior.
sourcepub fn dep(&mut self, name: &str, vers: &str) -> &mut Package
pub fn dep(&mut self, name: &str, vers: &str) -> &mut Package
Adds a normal dependency. Example:
[dependencies]
foo = {version = "1.0"}
sourcepub fn feature_dep(
&mut self,
name: &str,
vers: &str,
features: &[&str],
) -> &mut Package
pub fn feature_dep( &mut self, name: &str, vers: &str, features: &[&str], ) -> &mut Package
Adds a dependency with the given feature. Example:
[dependencies]
foo = {version = "1.0", "features": ["feat1", "feat2"]}
sourcepub fn target_dep(
&mut self,
name: &str,
vers: &str,
target: &str,
) -> &mut Package
pub fn target_dep( &mut self, name: &str, vers: &str, target: &str, ) -> &mut Package
Adds a platform-specific dependency. Example:
[target.'cfg(windows)'.dependencies]
foo = {version = "1.0"}
sourcepub fn registry_dep(&mut self, name: &str, vers: &str) -> &mut Package
pub fn registry_dep(&mut self, name: &str, vers: &str) -> &mut Package
Adds a dependency to the alternative registry.
sourcepub fn dev_dep(&mut self, name: &str, vers: &str) -> &mut Package
pub fn dev_dep(&mut self, name: &str, vers: &str) -> &mut Package
Adds a dev-dependency. Example:
[dev-dependencies]
foo = {version = "1.0"}
sourcepub fn build_dep(&mut self, name: &str, vers: &str) -> &mut Package
pub fn build_dep(&mut self, name: &str, vers: &str) -> &mut Package
Adds a build-dependency. Example:
[build-dependencies]
foo = {version = "1.0"}
pub fn add_dep(&mut self, dep: &Dependency) -> &mut Package
sourcepub fn yanked(&mut self, yanked: bool) -> &mut Package
pub fn yanked(&mut self, yanked: bool) -> &mut Package
Specifies whether or not the package is “yanked”.
sourcepub fn proc_macro(&mut self, proc_macro: bool) -> &mut Package
pub fn proc_macro(&mut self, proc_macro: bool) -> &mut Package
Specifies whether or not this is a proc macro.
sourcepub fn feature(&mut self, name: &str, deps: &[&str]) -> &mut Package
pub fn feature(&mut self, name: &str, deps: &[&str]) -> &mut Package
Adds an entry in the [features]
section.
sourcepub fn rust_version(&mut self, rust_version: &str) -> &mut Package
pub fn rust_version(&mut self, rust_version: &str) -> &mut Package
Specify a minimal Rust version.
sourcepub fn invalid_json(&mut self, invalid: bool) -> &mut Package
pub fn invalid_json(&mut self, invalid: bool) -> &mut Package
Causes the JSON line emitted in the index to be invalid, presumably causing Cargo to skip over this version.
pub fn links(&mut self, links: &str) -> &mut Package
pub fn cargo_feature(&mut self, feature: &str) -> &mut Package
sourcepub fn schema_version(&mut self, version: u32) -> &mut Package
pub fn schema_version(&mut self, version: u32) -> &mut Package
Sets the index schema version for this package.
See cargo::sources::registry::IndexPackage
for more information.
sourcepub fn publish(&self) -> String
pub fn publish(&self) -> String
Creates the package and place it in the registry.
This does not actually use Cargo’s publishing system, but instead manually creates the entry in the registry on the filesystem.
Returns the checksum for the package.
sourcepub fn archive_dst(&self) -> PathBuf
pub fn archive_dst(&self) -> PathBuf
Returns the path to the compressed package file.
Auto Trait Implementations§
impl Freeze for Package
impl RefUnwindSafe for Package
impl Send for Package
impl Sync for Package
impl Unpin for Package
impl UnwindSafe for Package
Blanket Implementations§
source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
source§impl<T> Instrument for T
impl<T> Instrument for T
source§fn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
source§fn in_current_span(self) -> Instrumented<Self>
fn in_current_span(self) -> Instrumented<Self>
source§impl<T> IntoEither for T
impl<T> IntoEither for T
source§fn into_either(self, into_left: bool) -> Either<Self, Self>
fn into_either(self, into_left: bool) -> Either<Self, Self>
self
into a Left
variant of Either<Self, Self>
if into_left
is true
.
Converts self
into a Right
variant of Either<Self, Self>
otherwise. Read moresource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
self
into a Left
variant of Either<Self, Self>
if into_left(&self)
returns true
.
Converts self
into a Right
variant of Either<Self, Self>
otherwise. Read more