feat(reflectors): refactor reflector configuration
Build binaries / Build (arm-musleabi) (push) Successful in 1m46s
Build binaries / Build (aarch64-musl) (push) Successful in 1m46s
Build binaries / Build (arm-musleabihf) (push) Successful in 2m1s
Build binaries / Build (armv7-musleabi) (push) Successful in 2m1s
Build binaries / Build (armv7-musleabihf) (push) Successful in 1m53s
Build binaries / Build (i686-musl) (push) Successful in 1m53s
Build binaries / Build (mips-musl) (push) Successful in 2m4s
Build binaries / Build (mips64-muslabi64) (push) Successful in 2m1s
Build binaries / Build (mips64el-muslabi64) (push) Successful in 2m5s
Build binaries / Build (mipsel-musl) (push) Successful in 2m3s
Build binaries / Build (riscv64gc-musl) (push) Successful in 1m43s
Build binaries / Build (x86_64-musl) (push) Successful in 1m47s
Build binaries / Build (arm-musleabi) (push) Successful in 1m46s
Build binaries / Build (aarch64-musl) (push) Successful in 1m46s
Build binaries / Build (arm-musleabihf) (push) Successful in 2m1s
Build binaries / Build (armv7-musleabi) (push) Successful in 2m1s
Build binaries / Build (armv7-musleabihf) (push) Successful in 1m53s
Build binaries / Build (i686-musl) (push) Successful in 1m53s
Build binaries / Build (mips-musl) (push) Successful in 2m4s
Build binaries / Build (mips64-muslabi64) (push) Successful in 2m1s
Build binaries / Build (mips64el-muslabi64) (push) Successful in 2m5s
Build binaries / Build (mipsel-musl) (push) Successful in 2m3s
Build binaries / Build (riscv64gc-musl) (push) Successful in 1m43s
Build binaries / Build (x86_64-musl) (push) Successful in 1m47s
This commit is contained in:
4 files changed
+101
-79
No files matched your search
+42
-18
@@ -3,6 +3,8 @@
|
||||
// SPDX-License-Identifier: MPL-2.0
|
||||
//
|
||||
|
||||
use crate::settings::ReflectorSettings;
|
||||
|
||||
use super::{AdvancedSettings, NetworkSettings, ObservabilitySettings, OutputSettings, Settings};
|
||||
use std::error::Error;
|
||||
use std::fmt::{self, Display, Formatter};
|
||||
@@ -88,6 +90,7 @@ impl Settings {
|
||||
let mut report = ValidationReport::default();
|
||||
|
||||
self.network.validate(&mut report);
|
||||
self.reflectors.validate(&mut report);
|
||||
self.output.validate(&mut report);
|
||||
self.observability.validate(&mut report);
|
||||
self.advanced_settings.validate(&mut report);
|
||||
@@ -192,6 +195,45 @@ impl NetworkSettings {
|
||||
}
|
||||
}
|
||||
|
||||
impl ReflectorSettings {
|
||||
fn validate(&self, report: &mut ValidationReport) {
|
||||
if self.num_reflectors == 0 {
|
||||
report.error("reflectors.num_reflectors", "must be greater than 0");
|
||||
}
|
||||
|
||||
if self.peer_reselection_time == 0 {
|
||||
report.error("reflectors.peer_reselection_time", "must be greater than 0");
|
||||
}
|
||||
|
||||
if self.files.is_empty() && self.entries.is_empty() {
|
||||
report.error(
|
||||
"reflectors",
|
||||
"at least one reflector file or inline entry is required",
|
||||
);
|
||||
}
|
||||
|
||||
for (index, file) in self.files.iter().enumerate() {
|
||||
if file.trim().is_empty() {
|
||||
report.error(
|
||||
"reflectors.files",
|
||||
format!("entry {index} must not be empty"),
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
for (index, country) in self.countries.iter().enumerate() {
|
||||
if country.len() != 2 || !country.bytes().all(|c| c.is_ascii_alphabetic()) {
|
||||
report.error(
|
||||
"reflectors.countries",
|
||||
format!(
|
||||
"entry {index} ({country:?}) must be an ISO 3166-1 alpha-2 country code"
|
||||
),
|
||||
);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
impl OutputSettings {
|
||||
fn validate(&self, report: &mut ValidationReport) {
|
||||
if self.suppress_statistics {
|
||||
@@ -298,24 +340,6 @@ impl AdvancedSettings {
|
||||
self.tick_interval,
|
||||
);
|
||||
|
||||
if self.num_reflectors < 5 {
|
||||
report.error(
|
||||
"advanced_settings.num_reflectors",
|
||||
format!("must be at least 5, got {}", self.num_reflectors,),
|
||||
);
|
||||
}
|
||||
|
||||
if self.peer_reselection_time == 0 {
|
||||
report.error(
|
||||
"advanced_settings.peer_reselection_time",
|
||||
"must be greater than 0",
|
||||
);
|
||||
}
|
||||
|
||||
if self.reflector_list_file.trim().is_empty() {
|
||||
report.error("advanced_settings.reflector_list_file", "must not be empty");
|
||||
}
|
||||
|
||||
if self.speed_hist_size == 0 {
|
||||
report.error(
|
||||
"advanced_settings.speed_hist_size",
|
||||
|
||||
Reference in new issue
Block a user