Skip to content

Commit

Permalink
Fix missing field in toml error (#66)
Browse files Browse the repository at this point in the history
  • Loading branch information
ShaishavGandhi committed Apr 26, 2020
1 parent fd7902e commit 7158bfd
Show file tree
Hide file tree
Showing 7 changed files with 47 additions and 18 deletions.
2 changes: 1 addition & 1 deletion 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 Cargo.toml
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
[package]
name = "fab"
version = "0.4.0"
version = "0.4.1"
authors = ["Shaishav Gandhi <shaishavgandhi05@gmail.com>"]
edition = "2018"

Expand Down
20 changes: 10 additions & 10 deletions src/cli.rs
Original file line number Diff line number Diff line change
@@ -1,25 +1,25 @@
use crate::preferences::Preferences;
use clap::{App, Arg};

pub const VERSION: &str = "0.4.1";

/// Builds the App with commands and defaults.
pub fn build_cli(preferences: &Preferences) -> App {
let version = "0.4.0";

let default_task_priority: &Vec<&str> = &preferences
.default_task_priority
.iter()
.map(std::ops::Deref::deref)
.collect();

let default_limit = preferences.default_limit.as_str();
let default_limit = preferences.default_limit_str.as_str();
let default_sort = preferences.default_sort.as_ref();

App::new("Fab")
.author("Shaishav <shaishavgandhi05@gmail.com>")
.version(version)
.version(VERSION)
.subcommand(
App::new("diffs")
.version(version)
.version(VERSION)
.author("Shaishav <shaishavgandhi05@gmail.com>")
.about("Commands related to your differential revisions")
.arg(
Expand All @@ -32,7 +32,7 @@ pub fn build_cli(preferences: &Preferences) -> App {
.subcommand(
App::new("tasks")
.about("Commands related to maniphest tasks")
.version(version)
.version(VERSION)
.author("Shaishav <shaishavgandhi05@gmail.com>")
.arg(
Arg::with_name("priority")
Expand Down Expand Up @@ -78,7 +78,7 @@ pub fn build_cli(preferences: &Preferences) -> App {
.subcommand(
App::new("summary")
.about("Gives a snapshot of what is relevant to you in the moment")
.version(version)
.version(VERSION)
.author("Shaishav <shaishavgandhi05@gmail.com>"),
)
.subcommand(
Expand All @@ -90,19 +90,19 @@ pub fn build_cli(preferences: &Preferences) -> App {
.long("reset")
.help("Reset preferences to their default value"),
)
.version(version)
.version(VERSION)
.author("Shaishav <shaishavgandhi05@gmail.com>"),
)
.subcommand(
App::new("autocomplete")
.about("Add autocomplete suggestions for vim")
.version(version)
.version(VERSION)
.author("Shaishav <shaishavgandhi05@gmail.com>"),
)
.subcommand(
App::new("generate-bash-completions")
.about("Generate the bash completion files for fab")
.version(version)
.version(VERSION)
.author("Shaishav <shaishavgandhi05@gmail.com>"),
)
}
20 changes: 20 additions & 0 deletions src/main.rs
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
#[macro_use]
extern crate serde_json;

use crate::preferences::Preferences;
use clap_generate::generate;
use clap_generate::generators::{Bash, Elvish, Fish, PowerShell, Zsh};
use failure::Error;
Expand All @@ -20,6 +21,9 @@ const NO_BORDER_PRESET: &str = " ";
fn main() -> Result<(), Error> {
let preferences = preferences::get_preferences()?;

// Migrate any newer fields, assign them values and store them
let preferences = migrate_preferences(preferences)?;

let app = cli::build_cli(&preferences);
let matches = &app.get_matches();

Expand All @@ -46,3 +50,19 @@ fn main() -> Result<(), Error> {
}
Ok(())
}

/// Migrates any missing fields that were added as the application progresses.
///
/// It's important to remember to add any default values otherwise confy will blow
/// up with a BadTomlError
fn migrate_preferences(preferences: Preferences) -> Result<Preferences, failure::Error> {
let preferences = Preferences {
default_limit_str: preferences.default_limit.to_string(),
default_limit: preferences.default_limit,
default_sort: preferences.default_sort,
default_task_priority: preferences.default_task_priority,
summary_task_priority: preferences.summary_task_priority,
};
preferences::set_preferences(&preferences)?;
Ok(preferences)
}
17 changes: 13 additions & 4 deletions src/preferences.rs
Original file line number Diff line number Diff line change
Expand Up @@ -22,16 +22,23 @@ pub fn set_preferences(preferences: &Preferences) -> Result<(), Error> {
pub struct Preferences {
pub summary_task_priority: Vec<String>,
pub default_task_priority: Vec<String>,
pub default_limit: String,
pub default_limit: i32,
pub default_sort: String,
#[serde(default = "default_limit")]
pub default_limit_str: String,
}

fn default_limit() -> String {
String::from("20")
}

impl ::std::default::Default for Preferences {
fn default() -> Self {
Self {
summary_task_priority: vec![String::from("high"), String::from("needs-triage")],
default_task_priority: vec![String::from("high")],
default_limit: "20".to_string(),
default_limit: 20,
default_limit_str: "20".to_string(),
default_sort: "updated".to_string(),
}
}
Expand Down Expand Up @@ -88,7 +95,7 @@ pub fn process_configuration(matches: &ArgMatches) -> Result<(), Error> {
);

let default_limit = Input::with_theme(&ColorfulTheme::default())
.with_initial_text(&current_preferences.default_limit.as_str())
.with_initial_text(&current_preferences.default_limit_str.as_str())
.interact()?;

println!(
Expand All @@ -110,6 +117,7 @@ pub fn process_configuration(matches: &ArgMatches) -> Result<(), Error> {
summary_task_priority: summary_priorities,
default_task_priority: default_task_priorities,
default_limit,
default_limit_str: format!("{}", default_limit),
default_sort: default_sort.to_string(),
};

Expand All @@ -118,7 +126,8 @@ pub fn process_configuration(matches: &ArgMatches) -> Result<(), Error> {

fn reset_preferences() -> Result<(), Error> {
let default_preferences = Preferences {
default_limit: "20".to_string(),
default_limit: 20,
default_limit_str: "20".to_string(),
default_task_priority: vec![String::from("high")],
summary_task_priority: vec![String::from("high")],
default_sort: "updated".to_string(),
Expand Down
2 changes: 1 addition & 1 deletion src/summary.rs
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,7 @@ pub fn process_summary(
get_needs_review_diffs(config),
get_authored_diffs(config),
get_tasks(
preferences.default_limit.as_str(),
preferences.default_limit_str.as_str(),
&priorities,
&preferences.default_sort,
&status,
Expand Down
2 changes: 1 addition & 1 deletion src/tasks.rs
Original file line number Diff line number Diff line change
Expand Up @@ -81,7 +81,7 @@ fn process_list_tasks(
config: &FabConfig,
preferences: &Preferences,
) -> Result<(), Error> {
let pref_limit = preferences.default_limit.as_str();
let pref_limit = preferences.default_limit_str.as_str();
let limit = matches.value_of("limit").unwrap_or(pref_limit);

let priorities: Vec<_> = matches.values_of("priority")
Expand Down

0 comments on commit 7158bfd

Please sign in to comment.