From 81a0c6204bd6a0574ebca4d0dfb49ab0b3cb57ca Mon Sep 17 00:00:00 2001 From: Paul-Christian Volkmer Date: Sat, 30 Sep 2023 12:10:58 +0200 Subject: [PATCH] Move common implementation into Requires trait --- src/model/data_form.rs | 53 ---------------------------------- src/model/requirements.rs | 58 ++++++++++++++++++++++++++++++++++++-- src/model/unterformular.rs | 53 ---------------------------------- 3 files changed, 56 insertions(+), 108 deletions(-) diff --git a/src/model/data_form.rs b/src/model/data_form.rs index d72cdfd..68362d7 100644 --- a/src/model/data_form.rs +++ b/src/model/data_form.rs @@ -312,59 +312,6 @@ impl Requires for DataForm { result } - - fn to_requirement_string<'a>(&'a self, all: &'a OnkostarEditor) -> String { - format!( - "{}\n{}", - self.to_listed_string(), - self.get_required_entries(all) - .iter() - .map(|entry| match entry { - Requirement::DataCatalogue(x) => { - let inner = x - .get_required_entries(all) - .iter() - .map(|inner_entry| match inner_entry { - Requirement::PropertyCatalogue(_) => Some(inner_entry.to_string()), - Requirement::ExternalPropertyCatalogue(_) => { - Some(inner_entry.to_string()) - } - _ => None, - }) - .filter(Option::is_some) - .map(|item| format!(" - {}\n", item.unwrap())) - .collect::>() - .join(""); - - if inner.is_empty() { - Some(format!(" + {}\n", x.to_listed_string())) - } else { - Some(format!(" + {}\n{}", x.to_listed_string(), inner)) - } - } - Requirement::ExternalDataCatalogue(_) => { - Some(format!(" + {}\n", entry.to_string())) - } - Requirement::DataFormReference(_) - | Requirement::ExternalDataFormReference(_) - | Requirement::UnterformularReference(_) - | Requirement::ExternalUnterformularReference(_) => { - Some(format!(" > {}\n", entry.to_string())) - } - Requirement::DataFormSubform(_) - | Requirement::ExternalDataFormSubform(_) - | Requirement::UnterformularSubform(_) - | Requirement::ExternalUnterformularSubform(_) => { - Some(format!(" * {}\n", entry.to_string())) - } - _ => None, - }) - .filter(Option::is_some) - .flatten() - .collect::>() - .join("") - ) - } } impl FolderContent for DataForm { diff --git a/src/model/requirements.rs b/src/model/requirements.rs index cf6bcc1..0e785db 100644 --- a/src/model/requirements.rs +++ b/src/model/requirements.rs @@ -79,8 +79,62 @@ impl ToString for Requirement<'_> { } } -pub trait Requires { +pub trait Requires +where + Self: Listable, +{ fn get_required_entries<'a>(&'a self, all: &'a OnkostarEditor) -> Vec; - fn to_requirement_string<'a>(&'a self, all: &'a OnkostarEditor) -> String; + fn to_requirement_string<'a>(&'a self, all: &'a OnkostarEditor) -> String { + format!( + "{}\n{}", + self.to_listed_string(), + self.get_required_entries(all) + .iter() + .map(|entry| match entry { + Requirement::DataCatalogue(x) => { + let inner = x + .get_required_entries(all) + .iter() + .map(|inner_entry| match inner_entry { + Requirement::PropertyCatalogue(_) => Some(inner_entry.to_string()), + Requirement::ExternalPropertyCatalogue(_) => { + Some(inner_entry.to_string()) + } + _ => None, + }) + .filter(Option::is_some) + .map(|item| format!(" - {}\n", item.unwrap())) + .collect::>() + .join(""); + + if inner.is_empty() { + Some(format!(" + {}\n", x.to_listed_string())) + } else { + Some(format!(" + {}\n{}", x.to_listed_string(), inner)) + } + } + Requirement::ExternalDataCatalogue(_) => { + Some(format!(" + {}\n", entry.to_string())) + } + Requirement::DataFormReference(_) + | Requirement::ExternalDataFormReference(_) + | Requirement::UnterformularReference(_) + | Requirement::ExternalUnterformularReference(_) => { + Some(format!(" > {}\n", entry.to_string())) + } + Requirement::DataFormSubform(_) + | Requirement::ExternalDataFormSubform(_) + | Requirement::UnterformularSubform(_) + | Requirement::ExternalUnterformularSubform(_) => { + Some(format!(" * {}\n", entry.to_string())) + } + _ => None, + }) + .filter(Option::is_some) + .flatten() + .collect::>() + .join("") + ) + } } diff --git a/src/model/unterformular.rs b/src/model/unterformular.rs index 2901ae6..d096552 100644 --- a/src/model/unterformular.rs +++ b/src/model/unterformular.rs @@ -316,59 +316,6 @@ impl Requires for Unterformular { result } - - fn to_requirement_string<'a>(&'a self, all: &'a OnkostarEditor) -> String { - format!( - "{}\n{}", - self.to_listed_string(), - self.get_required_entries(all) - .iter() - .map(|entry| match entry { - Requirement::DataCatalogue(x) => { - let inner = x - .get_required_entries(all) - .iter() - .map(|inner_entry| match inner_entry { - Requirement::PropertyCatalogue(_) => Some(inner_entry.to_string()), - Requirement::ExternalPropertyCatalogue(_) => { - Some(inner_entry.to_string()) - } - _ => None, - }) - .filter(Option::is_some) - .map(|item| format!(" - {}\n", item.unwrap())) - .collect::>() - .join(""); - - if inner.is_empty() { - Some(format!(" + {}\n", x.to_listed_string())) - } else { - Some(format!(" + {}\n{}", x.to_listed_string(), inner)) - } - } - Requirement::ExternalDataCatalogue(_) => { - Some(format!(" + {}\n", entry.to_string())) - } - Requirement::DataFormReference(_) - | Requirement::ExternalDataFormReference(_) - | Requirement::UnterformularReference(_) - | Requirement::ExternalUnterformularReference(_) => { - Some(format!(" > {}\n", entry.to_string())) - } - Requirement::DataFormSubform(_) - | Requirement::ExternalDataFormSubform(_) - | Requirement::UnterformularSubform(_) - | Requirement::ExternalUnterformularSubform(_) => { - Some(format!(" * {}\n", entry.to_string())) - } - _ => None, - }) - .filter(Option::is_some) - .flatten() - .collect::>() - .join("") - ) - } } impl FolderContent for Unterformular {