pub struct Relation(/* private fields */);Expand description
A node in the syntax tree representing a $ast
Implementations§
Source§impl Relation
impl Relation
Sourcepub fn syntax(&self) -> &SyntaxNode<Lang>
pub fn syntax(&self) -> &SyntaxNode<Lang>
Access the underlying syntax node.
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 try_name(&self) -> Option<String>
pub fn try_name(&self) -> Option<String>
Return the name of the package in the relation, if present.
Returns None for malformed relations that lack a package name
(e.g. when substvars are parsed without substvar support).
§Example
use debian_control::lossless::relations::Relation;
let relation = Relation::simple("samba");
assert_eq!(relation.try_name(), Some("samba".to_string()));Sourcepub fn name_range(&self) -> Option<TextRange>
pub fn name_range(&self) -> Option<TextRange>
Return the text range of the package-name token, if present.
Useful for editor tooling that wants to highlight or attach metadata to the package name itself, separate from any version constraint or architecture qualifier.
§Example
use debian_control::lossless::relations::Relation;
let relation: Relation = "samba (>= 4.0)".parse().unwrap();
let range = relation.name_range().unwrap();
assert_eq!(&relation.to_string()[range], "samba");Sourcepub fn name(&self) -> String
👎Deprecated since 0.3.6: Use try_name() instead, which returns Option<String>
pub fn name(&self) -> String
Use try_name() instead, which returns Option<String>
Return the name of the package in the relation.
§Panics
Panics if the relation has no package name (e.g. malformed input).
Prefer try_name for potentially malformed relations.
§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 profile_ranges(&self) -> impl Iterator<Item = TextRange> + '_
pub fn profile_ranges(&self) -> impl Iterator<Item = TextRange> + '_
Return an iterator over the text ranges of each build-profile name
token (the IDENT inside <...> groups).
Useful for tooling that wants to highlight, hover over, or navigate
from a specific profile name. The leading ! of disabled profiles is
not included.
§Example
use debian_control::lossless::relations::Relation;
let relation: Relation = "samba <!nocheck>".parse().unwrap();
let ranges: Vec<_> = relation.profile_ranges().collect();
assert_eq!(ranges.len(), 1);
let r = ranges[0];
assert_eq!(&relation.to_string()[r], "nocheck");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));