use super::elements::{
CompiledRecordOverride, CompiledUiOverride, RecordOverrideData, UiOverrideData,
};
use target_spec::Platform;
pub(crate) fn resolve_ui_setting<T: Clone>(
default_value: &T,
default_overrides: &[CompiledUiOverride],
user_value: Option<&T>,
user_overrides: &[CompiledUiOverride],
host_platform: &Platform,
get_override: impl Fn(&UiOverrideData) -> Option<&T>,
) -> T {
for override_ in user_overrides {
if override_.matches(host_platform)
&& let Some(v) = get_override(override_.data())
{
return v.clone();
}
}
for override_ in default_overrides {
if override_.matches(host_platform)
&& let Some(v) = get_override(override_.data())
{
return v.clone();
}
}
if let Some(v) = user_value {
return v.clone();
}
default_value.clone()
}
pub(crate) fn resolve_record_setting<T: Clone>(
default_value: &T,
default_overrides: &[CompiledRecordOverride],
user_value: Option<&T>,
user_overrides: &[CompiledRecordOverride],
host_platform: &Platform,
get_override: impl Fn(&RecordOverrideData) -> Option<&T>,
) -> T {
for override_ in user_overrides {
if override_.matches(host_platform)
&& let Some(v) = get_override(override_.data())
{
return v.clone();
}
}
for override_ in default_overrides {
if override_.matches(host_platform)
&& let Some(v) = get_override(override_.data())
{
return v.clone();
}
}
if let Some(v) = user_value {
return v.clone();
}
default_value.clone()
}