pub struct TemplatedControlEditor { /* private fields */ }Expand description
An editor for a control file that may be generated from a template.
This editor will automatically expand the template if it does not exist. It will also automatically update the template if the control file is changed.
§Example
use std::path::Path;
use debian_analyzer::control::TemplatedControlEditor;
let td = tempfile::tempdir().unwrap();
let mut editor = TemplatedControlEditor::create(td.path().join("control")).unwrap();
editor.add_source("foo").set_architecture(Some("all"));
editor.commit().unwrap();Implementations§
Source§impl TemplatedControlEditor
impl TemplatedControlEditor
Sourcepub fn create<P: AsRef<Path>>(control_path: P) -> Result<Self, EditorError>
pub fn create<P: AsRef<Path>>(control_path: P) -> Result<Self, EditorError>
Create a new control file editor.
Sourcepub fn template_type(&self) -> Option<TemplateType>
pub fn template_type(&self) -> Option<TemplateType>
Return the type of the template used to generate the control file.
Sourcepub fn open<P: AsRef<Path>>(control_path: P) -> Result<Self, EditorError>
pub fn open<P: AsRef<Path>>(control_path: P) -> Result<Self, EditorError>
Open an existing control file.
Methods from Deref<Target = 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 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 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);
}
}