From 4146b52c94590ff1c58c6c34862d685a298f16a1 Mon Sep 17 00:00:00 2001
From: Ian Jackson <ijackson@chiark.greenend.org.uk>
Date: Fri, 3 Sep 2021 23:46:14 +0100
Subject: [PATCH 6/8] introduce Description type

This reduces the number of arguments and will allow removing some
clone-and-hack.
---
 src/debian/control.rs | 55 ++++++++++++++++++++-----------------------
 src/debian/mod.rs     | 16 ++++++++-----
 2 files changed, 35 insertions(+), 36 deletions(-)

diff --git a/src/debian/control.rs b/src/debian/control.rs
index d202a35e..b50771f6 100644
--- a/src/debian/control.rs
+++ b/src/debian/control.rs
@@ -32,13 +32,16 @@ pub struct Package {
     recommends: Vec<String>,
     suggests: Vec<String>,
     provides: Vec<String>,
-    summary_prefix: String,
-    summary_suffix: String,
-    description_prefix: String,
-    description_suffix: String,
+    summary: Description,
+    description: Description,
     extra_lines: Vec<String>,
 }
 
+pub struct Description {
+    pub prefix: String,
+    pub suffix: String,
+}
+
 pub struct PkgTest {
     name: String,
     crate_name: String,
@@ -230,10 +233,8 @@ impl Package {
         basename: &str,
         name_suffix: Option<&str>,
         version: &Version,
-        summary_prefix: &str,
-        summary_suffix: &str,
-        description_prefix: &str,
-        description_suffix: &str,
+        summary: Description,
+        description: Description,
         feature: Option<&str>,
         f_deps: Vec<&str>,
         o_deps: Vec<String>,
@@ -329,10 +330,8 @@ impl Package {
             recommends,
             suggests,
             provides,
-            summary_prefix: summary_prefix.into(),
-            summary_suffix: summary_suffix.into(),
-            description_prefix: description_prefix.into(),
-            description_suffix: description_suffix.into(),
+            summary,
+            description,
             extra_lines: match (name_suffix, feature) {
                 (Some(_), None) => {
                     let fullpkg = format!("{}-{}", basename, version);
@@ -350,10 +349,8 @@ impl Package {
         basename: &str,
         name_suffix: Option<&str>,
         section: Option<&str>,
-        summary_prefix: &str,
-        summary_suffix: &str,
-        description_prefix: &str,
-        description_suffix: &str,
+        summary: Description,
+        description: Description,
     ) -> Self {
         let (name, mut provides) = match name_suffix {
             None => (basename.to_string(), vec![]),
@@ -376,10 +373,8 @@ impl Package {
             recommends: vec!["${cargo:Recommends}".to_string()],
             suggests: vec!["${cargo:Suggests}".to_string()],
             provides,
-            summary_prefix: summary_prefix.to_string(),
-            summary_suffix: summary_suffix.to_string(),
-            description_prefix: description_prefix.to_string(),
-            description_suffix: description_suffix.to_string(),
+            summary,
+            description,
             extra_lines: vec![
                 "Built-Using: ${cargo:Built-Using}".to_string(),
                 "XB-X-Cargo-Built-Using: ${cargo:X-Cargo-Built-Using}".to_string(),
@@ -393,10 +388,10 @@ impl Package {
 
     fn write_description(&self, out: &mut fmt::Formatter) -> fmt::Result {
         writeln!(out, "Description: {}{}",
-                 &self.summary_prefix, &self.summary_suffix)?;
+                 &self.summary.prefix, &self.summary.suffix)?;
         let description = format!("{}{}",
-                                  self.description_prefix,
-                                  self.description_suffix);
+                                  self.description.prefix,
+                                  self.description.suffix);
         for line in fill(&description.trim(), 79).lines() {
             let line = line.trim_end();
             if line.is_empty() {
@@ -411,7 +406,7 @@ impl Package {
     }
 
     pub fn summary_check_len(&self) -> std::result::Result<(),()> {
-        if self.summary_prefix.len() <= 80 { Ok(()) } else { Err(()) }
+        if self.summary.prefix.len() <= 80 { Ok(()) } else { Err(()) }
     }
 
     pub fn apply_overrides(&mut self, config: &Config, key: PackageKey, f_provides: Vec<&str>) {
@@ -419,18 +414,18 @@ impl Package {
             self.section = Some(section.to_string());
         }
         if let Some(summary) = &config.summary {
-            self.summary_prefix = summary.into();
+            self.summary.prefix = summary.into();
         }
         if let Some(summary) = config.package_summary(key) {
-            self.summary_prefix = summary.to_string();
-            self.summary_suffix = "".to_string();
+            self.summary.prefix = summary.to_string();
+            self.summary.suffix = "".to_string();
         }
         if let Some(description) = &config.description {
-            self.description_prefix = description.into();
+            self.description.prefix = description.into();
         }
         if let Some(description) = config.package_description(key) {
-            self.description_prefix = description.to_string();
-            self.description_suffix = "".to_string();
+            self.description.prefix = description.to_string();
+            self.description.suffix = "".to_string();
         }
 
         self.depends.extend(package_field_for_feature(
diff --git a/src/debian/mod.rs b/src/debian/mod.rs
index 0678a398..92660129 100644
--- a/src/debian/mod.rs
+++ b/src/debian/mod.rs
@@ -25,7 +25,7 @@ use crate::util::{
 
 use self::changelog::{ChangelogEntry, ChangelogIterator};
 use self::control::{deb_version, dsc_name};
-use self::control::{Package, PkgTest, Source};
+use self::control::{Package, PkgTest, Source, Description};
 use self::copyright::debian_copyright;
 pub use self::dependency::{deb_dep_add_nocheck, deb_deps};
 
@@ -746,8 +746,10 @@ fn prepare_debian_control<F: FnMut(&str) -> std::result::Result<std::fs::File, s
                 base_pkgname,
                 name_suffix,
                 &crate_info.version(),
-                &summary_prefix, &summary_suffix,
-                &description_prefix, &description_suffix,
+                Description { prefix: summary_prefix.clone(),
+                              suffix: summary_suffix.clone(), },
+                Description { prefix: description_prefix.clone(),
+                              suffix: description_suffix.clone(), },
                 if feature == "" { None } else { Some(feature) },
                 f_deps,
                 deb_deps(config, &o_deps)?,
@@ -839,7 +841,7 @@ fn prepare_debian_control<F: FnMut(&str) -> std::result::Result<std::fs::File, s
 
     if !bins.is_empty() {
         // adding " - binaries" is a bit redundant for users, so just leave as-is
-        let summary_suffix = "";
+        let summary_suffix = "".to_string();
         let description_suffix = format!(
             "This package contains the following binaries built from the Rust crate\n\"{}\":\n - {}",
             upstream_name,
@@ -855,8 +857,10 @@ fn prepare_debian_control<F: FnMut(&str) -> std::result::Result<std::fs::File, s
             } else {
                 Some("FIXME-(packages.\"(name)\".section)")
             },
-            &summary_prefix, &summary_suffix,
-            &description_prefix, &description_suffix,
+            Description { prefix: summary_prefix.clone(),
+                          suffix: summary_suffix.clone() },
+            Description { prefix: description_prefix.clone(),
+                          suffix: description_suffix.clone() },
         );
 
         // Binary package overrides.
-- 
2.20.1

