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

Sort dependencies and requirements

This commit is contained in:
Paul-Christian Volkmer 2023-09-30 13:26:25 +02:00
parent 8cae6ce706
commit d0de76770f
4 changed files with 32 additions and 3 deletions

View File

@ -102,7 +102,8 @@ impl Comparable for DataCatalogue {
impl Requires for DataCatalogue {
fn get_required_entries<'a>(&'a self, all: &'a OnkostarEditor) -> Vec<Requirement> {
self.entries
let mut result = self
.entries
.entry
.iter()
.filter(|&entry| entry.property_catalogue.is_some())
@ -116,7 +117,10 @@ impl Requires for DataCatalogue {
Some(contained) => Requirement::PropertyCatalogue(contained),
None => Requirement::ExternalPropertyCatalogue(entry),
})
.collect::<Vec<_>>()
.collect::<Vec<_>>();
result.sort_unstable_by_key(|item| item.sorting_key());
result
}
fn to_requirement_string<'a>(&'a self, all: &'a OnkostarEditor) -> String {

View File

@ -267,6 +267,7 @@ impl Requires for DataForm {
None => Requirement::ExternalDataCatalogue(entry.to_string()),
})
.collect::<Vec<_>>();
result.sort_unstable_by_key(|item| item.sorting_key());
let referenced_forms = &mut self
.entries
@ -287,6 +288,7 @@ impl Requires for DataForm {
},
})
.collect::<Vec<_>>();
referenced_forms.sort_unstable_by_key(|item| item.sorting_key());
result.append(referenced_forms);
let sub_forms = &mut self
@ -308,6 +310,7 @@ impl Requires for DataForm {
},
})
.collect::<Vec<_>>();
sub_forms.sort_unstable_by_key(|item| item.sorting_key());
result.append(sub_forms);
result

View File

@ -27,7 +27,7 @@ use crate::model::data_form::DataForm;
use crate::model::onkostar_editor::OnkostarEditor;
use crate::model::property_catalogue::PropertyCatalogue;
use crate::model::unterformular::Unterformular;
use crate::model::Listable;
use crate::model::{Comparable, Listable, Sortable};
#[allow(clippy::enum_variant_names)]
pub enum Requirement<'a> {
@ -48,6 +48,25 @@ pub enum Requirement<'a> {
ExternalUnterformularSubform(String),
}
impl Sortable for Requirement<'_> {
fn sorting_key(&self) -> String {
match self {
Requirement::PropertyCatalogue(item) => item.get_name(),
Requirement::DataCatalogue(item) => item.get_name(),
Requirement::DataFormReference(item) => item.get_name(),
Requirement::UnterformularReference(item) => item.get_name(),
Requirement::DataFormSubform(item) => item.get_name(),
Requirement::UnterformularSubform(item) => item.get_name(),
Requirement::ExternalPropertyCatalogue(name)
| Requirement::ExternalDataCatalogue(name)
| Requirement::ExternalDataFormReference(name)
| Requirement::ExternalDataFormSubform(name)
| Requirement::ExternalUnterformularReference(name)
| Requirement::ExternalUnterformularSubform(name) => name.to_string(),
}
}
}
impl ToString for Requirement<'_> {
fn to_string(&self) -> String {
match self {

View File

@ -271,6 +271,7 @@ impl Requires for Unterformular {
None => Requirement::ExternalDataCatalogue(entry.to_string()),
})
.collect::<Vec<_>>();
result.sort_unstable_by_key(|item| item.sorting_key());
let referenced_forms = &mut self
.entries
@ -291,6 +292,7 @@ impl Requires for Unterformular {
},
})
.collect::<Vec<_>>();
referenced_forms.sort_unstable_by_key(|item| item.sorting_key());
result.append(referenced_forms);
let sub_forms = &mut self
@ -312,6 +314,7 @@ impl Requires for Unterformular {
},
})
.collect::<Vec<_>>();
sub_forms.sort_unstable_by_key(|item| item.sorting_key());
result.append(sub_forms);
result