Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions Cargo.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion console_backend/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -41,7 +41,7 @@ regex = { version = "1.5.4" }
semver = { version = "1" }
rust-ini = "0.17.0"
sbp = { version = "4.0.2", features = ["json", "link", "swiftnav"] }
sbp-settings = "0.2"
sbp-settings = "0.3"
env_logger = { version = "0.9", optional = true }
mimalloc = { version = "0.1", default-features = false }

Expand Down
4 changes: 4 additions & 0 deletions console_backend/src/cli_options.rs
Original file line number Diff line number Diff line change
Expand Up @@ -136,6 +136,10 @@ pub struct CliOptions {
/// Set the width of the main window.
#[clap(long)]
pub width: Option<u32>,

/// Path to a yaml file containing known piski settings.
#[clap(long)]
pub settings_yaml: Option<PathBuf>,
}

impl CliOptions {
Expand Down
3 changes: 3 additions & 0 deletions console_backend/src/server.rs
Original file line number Diff line number Diff line change
Expand Up @@ -111,6 +111,9 @@ impl Server {
};
setup_logging(client_send.clone(), false);
let opt = CliOptions::from_filtered_cli();
if let Some(ref path) = opt.settings_yaml {
sbp_settings::settings::load_from_path(path).expect("failed to load settings");
}
let shared_state = SharedState::new();

let conn_manager = ConnectionManager::new(client_send.clone(), shared_state.clone());
Expand Down
32 changes: 18 additions & 14 deletions console_backend/src/settings_tab.rs
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@ use parking_lot::Mutex;
use sbp::link::Link;
use sbp::messages::piksi::MsgReset;
use sbp::messages::settings::MsgSettingsSave;
use sbp_settings::{Client, SettingKind, SettingValue};
use sbp_settings::{Client, Setting, SettingKind, SettingValue};

use crate::errors::SHARED_STATE_LOCK_MUTEX_FAILURE;
use crate::shared_state::{SettingsTabState, SharedState};
Expand Down Expand Up @@ -384,7 +384,7 @@ impl<'link, S: CapnProtoSender> SettingsTab<'link, S> {
Some(possible_values.to_string());
}

current_setting.value = Some(sbp_settings::SettingValue::String(setting.value));
current_setting.value = Some(SettingValue::String(setting.value));
}
}

Expand Down Expand Up @@ -491,19 +491,19 @@ pub struct SaveRequest {
}

struct Settings {
inner: BTreeMap<&'static str, BTreeMap<&'static str, Setting>>,
inner: BTreeMap<&'static str, BTreeMap<&'static str, SettingsEntry>>,
}

impl Settings {
fn new() -> Self {
let mut settings: Vec<_> = sbp_settings::settings().iter().collect();
let mut settings: Vec<_> = Setting::all().iter().collect();
settings.sort_by_key(|s| &s.group);
Self {
inner: settings
.into_iter()
.fold(BTreeMap::new(), |mut settings, setting| {
(*settings.entry(&setting.group).or_default())
.insert(&setting.name, Setting::new(setting));
.insert(&setting.name, SettingsEntry::new(setting));
settings
}),
}
Expand All @@ -517,7 +517,7 @@ impl Settings {
}
}

fn groups(&self) -> Vec<Vec<(&sbp_settings::Setting, &SettingValue)>> {
fn groups(&self) -> Vec<Vec<(&Setting, &SettingValue)>> {
self.inner.values().fold(Vec::new(), |mut groups, group| {
let group: Vec<_> = group
.values()
Expand All @@ -535,15 +535,19 @@ impl Settings {
})
}

fn get<'a, 'b>(&'a self, group: &'b str, name: &'b str) -> Result<&'a Setting> {
fn get<'a, 'b>(&'a self, group: &'b str, name: &'b str) -> Result<&'a SettingsEntry> {
self.inner
.get(group)
.map(|g| g.get(name))
.flatten()
.ok_or_else(|| anyhow!("unknown setting: group: {} name: {}", group, name))
}

fn get_mut<'a, 'b>(&'a mut self, group: &'b str, name: &'b str) -> Result<&'a mut Setting> {
fn get_mut<'a, 'b>(
&'a mut self,
group: &'b str,
name: &'b str,
) -> Result<&'a mut SettingsEntry> {
self.inner
.get_mut(group)
.map(|g| g.get_mut(name))
Expand All @@ -564,7 +568,7 @@ impl Settings {
}

impl std::ops::Deref for Settings {
type Target = BTreeMap<&'static str, BTreeMap<&'static str, Setting>>;
type Target = BTreeMap<&'static str, BTreeMap<&'static str, SettingsEntry>>;

fn deref(&self) -> &Self::Target {
&self.inner
Expand All @@ -573,13 +577,13 @@ impl std::ops::Deref for Settings {

/// A reference to a particular setting and its value if it has been fetched
#[derive(Debug)]
struct Setting {
setting: Cow<'static, sbp_settings::Setting>,
value: Option<sbp_settings::SettingValue>,
struct SettingsEntry {
setting: Cow<'static, Setting>,
value: Option<SettingValue>,
}

impl Setting {
fn new(setting: &'static sbp_settings::Setting) -> Self {
impl SettingsEntry {
fn new(setting: &'static Setting) -> Self {
Self {
setting: Cow::Borrowed(setting),
value: None,
Expand Down