fix(stats): don't require all fields under [stats] (#1437)

Before this change, when configuring only `common_subcommands` and
not `common_prefix` (so it would take its default value),
atuin produces an error message:
```
Error: could not load client settings  Caused by:     failed to deserialize: missing field `common_prefix`  Location:     atuin-client/src/settings.rs:456:26
Error: could not load client settings

Caused by:
    failed to deserialize: missing field `common_prefix`

Location:
    atuin-client/src/settings.rs:456:26
Error:: command not found
```

With this change, the fields can be specified separately and missing
fields will take their default values.
This commit is contained in:
Ramses 2023-12-11 21:16:41 +01:00 committed by GitHub
parent 3c7f6991e3
commit edc495895a
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -145,18 +145,30 @@ pub enum WordJumpMode {
#[derive(Clone, Debug, Deserialize)] #[derive(Clone, Debug, Deserialize)]
pub struct Stats { pub struct Stats {
#[serde(default = "Stats::common_prefix_default")]
pub common_prefix: Vec<String>, // sudo, etc. commands we want to strip off pub common_prefix: Vec<String>, // sudo, etc. commands we want to strip off
#[serde(default = "Stats::common_subcommands_default")]
pub common_subcommands: Vec<String>, // kubectl, commands we should consider subcommands for pub common_subcommands: Vec<String>, // kubectl, commands we should consider subcommands for
} }
impl Stats {
fn common_prefix_default() -> Vec<String> {
vec!["sudo", "doas"].into_iter().map(String::from).collect()
}
fn common_subcommands_default() -> Vec<String> {
vec!["cargo", "go", "git", "npm", "yarn", "pnpm", "kubectl"]
.into_iter()
.map(String::from)
.collect()
}
}
impl Default for Stats { impl Default for Stats {
fn default() -> Self { fn default() -> Self {
Self { Self {
common_prefix: vec!["sudo", "doas"].into_iter().map(String::from).collect(), common_prefix: Self::common_prefix_default(),
common_subcommands: vec!["cargo", "go", "git", "npm", "yarn", "pnpm", "kubectl"] common_subcommands: Self::common_subcommands_default(),
.into_iter()
.map(String::from)
.collect(),
} }
} }
} }