pub struct Relation(/* private fields */);Expand description
A node in the syntax tree representing a $ast
Implementations§
Source§impl Relation
impl Relation
Sourcepub fn new(
name: &str,
version_constraint: Option<(VersionConstraint, Version)>,
) -> Self
pub fn new( name: &str, version_constraint: Option<(VersionConstraint, Version)>, ) -> Self
Create a new relation
§Arguments
name- The name of the packageversion_constraint- The version constraint and version to use
§Example
use debian_control::lossless::relations::{Relation};
use debian_control::relations::VersionConstraint;
let relation = Relation::new("samba", Some((VersionConstraint::GreaterThanEqual, "2.0".parse().unwrap())));
assert_eq!(relation.to_string(), "samba (>= 2.0)");Sourcepub fn wrap_and_sort(&self) -> Self
pub fn wrap_and_sort(&self) -> Self
Wrap and sort this relation
§Example
use debian_control::lossless::relations::Relation;
let relation = " samba ( >= 2.0) ".parse::<Relation>().unwrap();
assert_eq!(relation.wrap_and_sort().to_string(), "samba (>= 2.0)");Sourcepub fn simple(name: &str) -> Self
pub fn simple(name: &str) -> Self
Create a new simple relation, without any version constraints.
§Example
use debian_control::lossless::relations::Relation;
let relation = Relation::simple("samba");
assert_eq!(relation.to_string(), "samba");Sourcepub fn drop_constraint(&mut self) -> bool
pub fn drop_constraint(&mut self) -> bool
Remove the version constraint from the relation.
§Example
use debian_control::lossless::relations::{Relation};
use debian_control::relations::VersionConstraint;
let mut relation = Relation::new("samba", Some((VersionConstraint::GreaterThanEqual, "2.0".parse().unwrap())));
relation.drop_constraint();
assert_eq!(relation.to_string(), "samba");Sourcepub fn name(&self) -> String
pub fn name(&self) -> String
Return the name of the package in the relation.
§Example
use debian_control::lossless::relations::Relation;
let relation = Relation::simple("samba");
assert_eq!(relation.name(), "samba");Sourcepub fn archqual(&self) -> Option<String>
pub fn archqual(&self) -> Option<String>
Return the archqual
§Example
use debian_control::lossless::relations::Relation;
let relation: Relation = "samba:any".parse().unwrap();
assert_eq!(relation.archqual(), Some("any".to_string()));Sourcepub fn set_archqual(&mut self, archqual: &str)
pub fn set_archqual(&mut self, archqual: &str)
Set the architecture qualifier for this relation.
§Example
use debian_control::lossless::relations::Relation;
let mut relation = Relation::simple("samba");
relation.set_archqual("any");
assert_eq!(relation.to_string(), "samba:any");Sourcepub fn version(&self) -> Option<(VersionConstraint, Version)>
pub fn version(&self) -> Option<(VersionConstraint, Version)>
Return the version constraint and the version it is constrained to.
Sourcepub fn set_version(
&mut self,
version_constraint: Option<(VersionConstraint, Version)>,
)
pub fn set_version( &mut self, version_constraint: Option<(VersionConstraint, Version)>, )
Set the version constraint for this relation
§Example
use debian_control::lossless::relations::{Relation};
use debian_control::relations::VersionConstraint;
let mut relation = Relation::simple("samba");
relation.set_version(Some((VersionConstraint::GreaterThanEqual, "2.0".parse().unwrap())));
assert_eq!(relation.to_string(), "samba (>= 2.0)");Sourcepub fn architectures(&self) -> Option<impl Iterator<Item = String> + '_>
pub fn architectures(&self) -> Option<impl Iterator<Item = String> + '_>
Return an iterator over the architectures for this relation
§Example
use debian_control::lossless::relations::Relation;
let relation: Relation = "samba [amd64]".parse().unwrap();
assert_eq!(relation.architectures().unwrap().collect::<Vec<_>>(), vec!["amd64".to_string()]);Sourcepub fn profiles(&self) -> impl Iterator<Item = Vec<BuildProfile>> + '_
pub fn profiles(&self) -> impl Iterator<Item = Vec<BuildProfile>> + '_
Returns an iterator over the build profiles for this relation
§Example
use debian_control::lossless::relations::{Relation};
use debian_control::relations::{BuildProfile};
let relation: Relation = "samba <!nocheck>".parse().unwrap();
assert_eq!(relation.profiles().collect::<Vec<_>>(), vec![vec![BuildProfile::Disabled("nocheck".to_string())]]);Sourcepub fn remove(&mut self)
pub fn remove(&mut self)
Remove this relation
§Example
use debian_control::lossless::relations::{Relation,Entry};
let mut entry: Entry = r"python3-dulwich (>= 0.19.0) | python3-urllib3 (<< 1.26.0)".parse().unwrap();
let mut relation = entry.get_relation(0).unwrap();
relation.remove();
assert_eq!(entry.to_string(), "python3-urllib3 (<< 1.26.0)");Sourcepub fn set_architectures<'a>(
&mut self,
architectures: impl Iterator<Item = &'a str>,
)
pub fn set_architectures<'a>( &mut self, architectures: impl Iterator<Item = &'a str>, )
Set the architectures for this relation
§Example
use debian_control::lossless::relations::Relation;
let mut relation = Relation::simple("samba");
relation.set_architectures(vec!["amd64", "i386"].into_iter());
assert_eq!(relation.to_string(), "samba [amd64 i386]");Sourcepub fn add_profile(&mut self, profile: &[BuildProfile])
pub fn add_profile(&mut self, profile: &[BuildProfile])
Add a build profile to this relation
§Example
use debian_control::lossless::relations::Relation;
use debian_control::relations::BuildProfile;
let mut relation = Relation::simple("samba");
relation.add_profile(&[BuildProfile::Disabled("nocheck".to_string())]);
assert_eq!(relation.to_string(), "samba <!nocheck>");Sourcepub fn build(name: &str) -> RelationBuilder
pub fn build(name: &str) -> RelationBuilder
Build a new relation
Sourcepub fn is_implied_by(&self, outer: &Relation) -> bool
pub fn is_implied_by(&self, outer: &Relation) -> bool
Check if this relation is implied by another relation.
A relation is implied by another if the outer relation is more restrictive or equal to this relation. For example:
pkg >= 1.0is implied bypkg >= 1.5(outer is more restrictive)pkg >= 1.0is implied bypkg = 1.5(outer is more restrictive)pkg(no version) is implied by any versioned constraint onpkg
§Arguments
outer- The outer relation that may imply this relation
§Returns
true if this relation is implied by outer, false otherwise
§Example
use debian_control::lossless::relations::Relation;
use debian_control::relations::VersionConstraint;
let inner = Relation::new("pkg", Some((VersionConstraint::GreaterThanEqual, "1.0".parse().unwrap())));
let outer = Relation::new("pkg", Some((VersionConstraint::GreaterThanEqual, "1.5".parse().unwrap())));
assert!(inner.is_implied_by(&outer));
let inner2 = Relation::new("pkg", None);
assert!(inner2.is_implied_by(&outer));