1
0
mirror of https://github.com/pcvolkmer/osc-variant.git synced 2025-04-20 20:26:50 +00:00

Do not list form references twice as dataform and unterformular

This commit is contained in:
Paul-Christian Volkmer 2023-09-03 18:14:06 +02:00
parent 42cbb9ce7e
commit e33b1a3a4c
2 changed files with 16 additions and 46 deletions

View File

@ -256,7 +256,7 @@ impl Comparable for DataForm {
impl Requires for DataForm { impl Requires for DataForm {
fn get_required_entries<'a>(&'a self, all: &'a OnkostarEditor) -> Vec<Requirement> { fn get_required_entries<'a>(&'a self, all: &'a OnkostarEditor) -> Vec<Requirement> {
let mut data_catalogues = self let mut result = self
.data_catalogues .data_catalogues
.data_catalogue .data_catalogue
.iter() .iter()
@ -268,7 +268,7 @@ impl Requires for DataForm {
}) })
.collect::<Vec<_>>(); .collect::<Vec<_>>();
let data_forms = &mut self let referenced_forms = &mut self
.entries .entries
.entry .entry
.iter() .iter()
@ -281,30 +281,15 @@ impl Requires for DataForm {
.into_iter() .into_iter()
.map(|entry| match all.find_data_form(entry.as_str()) { .map(|entry| match all.find_data_form(entry.as_str()) {
Some(contained) => Requirement::DataFormReference(contained), Some(contained) => Requirement::DataFormReference(contained),
None => Requirement::ExternalDataFormReference(entry.to_string()), None => match all.find_unterformular(entry.as_str()) {
Some(contained) => Requirement::UnterformularReference(contained),
None => Requirement::ExternalUnterformularReference(entry.to_string()),
},
}) })
.collect::<Vec<_>>(); .collect::<Vec<_>>();
data_catalogues.append(data_forms); result.append(referenced_forms);
let unterformulare = &mut self result
.entries
.entry
.iter()
.filter(|&entry| entry.get_type() == "formReference")
.filter_map(|entry| match &entry.referenced_data_form {
Some(name) => Some(name),
None => None,
})
.collect::<HashSet<_>>()
.into_iter()
.map(|entry| match all.find_unterformular(entry.as_str()) {
Some(contained) => Requirement::UnterformularReference(contained),
None => Requirement::ExternalUnterformularReference(entry.to_string()),
})
.collect::<Vec<_>>();
data_catalogues.append(unterformulare);
data_catalogues
} }
fn to_requirement_string<'a>(&'a self, all: &'a OnkostarEditor) -> String { fn to_requirement_string<'a>(&'a self, all: &'a OnkostarEditor) -> String {

View File

@ -260,7 +260,7 @@ impl Comparable for Unterformular {
impl Requires for Unterformular { impl Requires for Unterformular {
fn get_required_entries<'a>(&'a self, all: &'a OnkostarEditor) -> Vec<Requirement> { fn get_required_entries<'a>(&'a self, all: &'a OnkostarEditor) -> Vec<Requirement> {
let mut data_catalogues = self let mut result = self
.data_catalogues .data_catalogues
.data_catalogue .data_catalogue
.iter() .iter()
@ -272,7 +272,7 @@ impl Requires for Unterformular {
}) })
.collect::<Vec<_>>(); .collect::<Vec<_>>();
let data_forms = &mut self let referenced_forms = &mut self
.entries .entries
.entry .entry
.iter() .iter()
@ -285,30 +285,15 @@ impl Requires for Unterformular {
.into_iter() .into_iter()
.map(|entry| match all.find_data_form(entry.as_str()) { .map(|entry| match all.find_data_form(entry.as_str()) {
Some(contained) => Requirement::DataFormReference(contained), Some(contained) => Requirement::DataFormReference(contained),
None => Requirement::ExternalDataFormReference(entry.to_string()), None => match all.find_unterformular(entry.as_str()) {
Some(contained) => Requirement::UnterformularReference(contained),
None => Requirement::ExternalUnterformularReference(entry.to_string()),
},
}) })
.collect::<Vec<_>>(); .collect::<Vec<_>>();
data_catalogues.append(data_forms); result.append(referenced_forms);
let unterformulare = &mut self result
.entries
.entry
.iter()
.filter(|&entry| entry.get_type() == "formReference")
.filter_map(|entry| match &entry.referenced_data_form {
Some(name) => Some(name),
None => None,
})
.collect::<HashSet<_>>()
.into_iter()
.map(|entry| match all.find_unterformular(entry.as_str()) {
Some(contained) => Requirement::UnterformularReference(contained),
None => Requirement::ExternalUnterformularReference(entry.to_string()),
})
.collect::<Vec<_>>();
data_catalogues.append(unterformulare);
data_catalogues
} }
fn to_requirement_string<'a>(&'a self, all: &'a OnkostarEditor) -> String { fn to_requirement_string<'a>(&'a self, all: &'a OnkostarEditor) -> String {