pub struct Control(/* private fields */);Expand description
A Debian control file
Implementations§
Source§impl Control
impl Control
Sourcepub fn as_mut_deb822(&mut self) -> &mut Deb822
pub fn as_mut_deb822(&mut self) -> &mut Deb822
Return the underlying deb822 object, mutable
Sourcepub fn add_source(&mut self, name: &str) -> Source
pub fn add_source(&mut self, name: &str) -> Source
Sourcepub fn add_binary(&mut self, name: &str) -> Binary
pub fn add_binary(&mut self, name: &str) -> Binary
Sourcepub fn remove_binary(&mut self, name: &str) -> bool
pub fn remove_binary(&mut self, name: &str) -> bool
Remove a binary package paragraph by name
§Arguments
name- The name of the binary package to remove
§Returns
true if a binary paragraph with the given name was found and removed, false otherwise
§Example
use debian_control::lossless::control::Control;
let mut control = Control::new();
control.add_binary("foo");
assert_eq!(control.binaries().count(), 1);
assert!(control.remove_binary("foo"));
assert_eq!(control.binaries().count(), 0);Sourcepub fn from_file<P: AsRef<Path>>(path: P) -> Result<Self, Error>
pub fn from_file<P: AsRef<Path>>(path: P) -> Result<Self, Error>
Read a control file from a file
Sourcepub fn from_file_relaxed<P: AsRef<Path>>(
path: P,
) -> Result<(Self, Vec<String>), Error>
pub fn from_file_relaxed<P: AsRef<Path>>( path: P, ) -> Result<(Self, Vec<String>), Error>
Read a control file from a file, allowing syntax errors
Sourcepub fn read_relaxed<R: Read>(r: R) -> Result<(Self, Vec<String>), Error>
pub fn read_relaxed<R: Read>(r: R) -> Result<(Self, Vec<String>), Error>
Read a control file from a reader, allowing syntax errors
Sourcepub fn wrap_and_sort(
&mut self,
indentation: Indentation,
immediate_empty_line: bool,
max_line_length_one_liner: Option<usize>,
)
pub fn wrap_and_sort( &mut self, indentation: Indentation, immediate_empty_line: bool, max_line_length_one_liner: Option<usize>, )
Wrap and sort the control file
§Arguments
indentation- The indentation to useimmediate_empty_line- Whether to add an empty line at the start of multi-line fieldsmax_line_length_one_liner- The maximum line length for one-liner fields
Sourcepub fn sort_binaries(&mut self, keep_first: bool)
pub fn sort_binaries(&mut self, keep_first: bool)
Sort binary package paragraphs alphabetically by package name.
This method reorders the binary package paragraphs in alphabetical order based on their Package field value. The source paragraph always remains first.
§Arguments
keep_first- If true, keeps the first binary package in place and only sorts the remaining binary packages. If false, sorts all binary packages.
§Example
use debian_control::lossless::Control;
let input = r#"Source: foo
Package: libfoo
Architecture: all
Package: libbar
Architecture: all
"#;
let mut control: Control = input.parse().unwrap();
control.sort_binaries(false);
// Binary packages are now sorted: libbar comes before libfoo
let binaries: Vec<_> = control.binaries().collect();
assert_eq!(binaries[0].name(), Some("libbar".to_string()));
assert_eq!(binaries[1].name(), Some("libfoo".to_string()));Sourcepub fn fields_in_range(
&self,
range: TextRange,
) -> impl Iterator<Item = Entry> + '_
pub fn fields_in_range( &self, range: TextRange, ) -> impl Iterator<Item = Entry> + '_
Iterate over fields that overlap with the given range
This method returns all fields (entries) from all paragraphs that have any overlap with the specified text range. This is useful for incremental parsing in LSP contexts where you only want to process fields that were affected by a text change.
§Arguments
range- The text range to check for overlaps
§Returns
An iterator over all Entry items that overlap with the given range
§Example
use debian_control::lossless::Control;
use deb822_lossless::TextRange;
let control_text = "Source: foo\nMaintainer: test@example.com\n\nPackage: bar\nArchitecture: all\n";
let control: Control = control_text.parse().unwrap();
// Get fields in a specific range (e.g., where a change occurred)
let change_range = TextRange::new(20.into(), 40.into());
for entry in control.fields_in_range(change_range) {
if let Some(key) = entry.key() {
println!("Field {} was in the changed range", key);
}
}