/
dependency.rs
63 lines (57 loc) · 2.09 KB
/
dependency.rs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
use cargo_registry::views::krate_publish as u;
/// A builder for constructing a dependency of another crate.
pub struct DependencyBuilder {
explicit_name_in_toml: Option<u::EncodableCrateName>,
name: String,
registry: Option<String>,
version_req: u::EncodableCrateVersionReq,
}
impl DependencyBuilder {
/// Create a dependency on the crate with the given name.
pub fn new(name: &str) -> Self {
DependencyBuilder {
explicit_name_in_toml: None,
name: name.to_string(),
registry: None,
version_req: u::EncodableCrateVersionReq(semver::VersionReq::parse(">= 0").unwrap()),
}
}
/// Rename this dependency.
pub fn rename(mut self, new_name: &str) -> Self {
self.explicit_name_in_toml = Some(u::EncodableCrateName(new_name.to_string()));
self
}
/// Set an alternative registry for this dependency.
pub fn registry(mut self, registry: &str) -> Self {
self.registry = Some(registry.to_string());
self
}
/// Set the version requirement for this dependency.
///
/// # Panics
///
/// Panics if the `version_req` string specified isn't a valid `semver::VersionReq`.
#[track_caller]
pub fn version_req(mut self, version_req: &str) -> Self {
self.version_req = u::EncodableCrateVersionReq(
semver::VersionReq::parse(version_req)
.expect("version req isn't a valid semver::VersionReq"),
);
self
}
/// Consume this builder to create a `u::CrateDependency`. If the dependent crate doesn't
/// already exist, publishing a crate with this dependency will fail.
pub fn build(self) -> u::EncodableCrateDependency {
u::EncodableCrateDependency {
name: u::EncodableCrateName(self.name),
optional: false,
default_features: true,
features: Vec::new(),
version_req: self.version_req,
target: None,
kind: None,
explicit_name_in_toml: self.explicit_name_in_toml,
registry: self.registry,
}
}
}