cratesio-placeholder-package

Crates.iocratesio-placeholder-package
lib.rscratesio-placeholder-package
version0.0.3-f
sourcesrc
created_at2022-04-26 12:58:28.344361
updated_at2022-04-28 19:35:35.558827
descriptionA placeholder package intended to be overridden by `path =` or `git =` dependencies
homepage
repository
max_upload_size
id575366
size12,608
Daniel Henry-Mantilla (danielhenrymantilla)

documentation

README

::cratesio-placeholder-package

If there is nothing in a crate, then a fortiori, there is nothing wrong with it either!

If you depend on a crate and it is empty, did you really depend on that crate?

Rationale

Sometimes you may want to publish a crate having a private / git / local dependency, which is useful for local or experimental development stuff, but which prevents your crate from being published.

In that case, you can use this hack empty placeholder package in its stead:

# Cargo.toml

[dependencies.your-crate-proxy]
# What public / crates.io users will see/use:
package = "cratesio-placeholder-package"
version = "=0.0.0"

# What `path` dependents will use
path = "path/to/your-crate-proxy"

and then have a your-crate-proxy crate, at version 0.0.0, somewhere in your private project layout, which correctly depends on the other private stuff you may need.

# path/to/your-crate-proxy/Cargo.toml

[package]
name = "cratesio-placeholder-package"
version = "0.0.0"

[dependencies]
# the real private dependency(ies)
your-crate.path = "private/your-crate"

Feature: proxying Cargo features

Sometimes, you may also want to proxy features from the frontend to your private dependency / to transitively enable feature from the private dependency.

In order to do that, such features will need to be proxied through this cratesio-placeholder-package

Hence why this package also features a total of 26 placeholder features (placeholder-feature-a, placeholder-feature-b, …, placeholder-feature-z) which you can use to achieve proper feature transitivity:

# Cargo.toml
[features]
foo = ["your-crate-proxy/placeholder-feature-a"]

[dependencies.your-crate-proxy]
# What public / crates.io users will see/use:
package = "cratesio-placeholder-package"
version = "=0.0.0"

# What `path` dependents will use
path = "path/to/your-crate-proxy"

+

# path/to/your-crate-proxy/Cargo.toml
[package]
name = "cratesio-placeholder-package"
version = "0.0.0"

[dependencies]
# the real private dependency(ies)
your-crate.path = "private/your-crate"

[features]
placeholder-feature-a = ["your-crate/foo"]
Commit count: 0

cargo fmt