Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Icon theme with overrides from config #792

Merged
merged 4 commits into from
Apr 22, 2023

Conversation

sudame
Copy link
Contributor

@sudame sudame commented Jan 14, 2023

This PR will close #780

Background

👀 A detailed discussion can be found here: #780

When a user chooses to use custom icons, lsd should apply the custom icons for the conditions specified by the user, and use the default icons for all other conditions.
However, currently lsd ignores the default icons when a user sets custom icons.

Cause

The struct IconTheme has HashMap fields named name and extension. The Serde (Rust's deserialization module) can merge default values for structs, but it cannot do so for HashMap. As a result, the name and extension fields will not be merged if a custom configuration exists.

What I did

  • Created the ByFilename struct which wraps a HashMap for the name and extension fields.
    • ByFilename has the IntoIterator trait to minimize the impact on other parts of the code.
  • Set a custom deserializer for ByFilename .
  • Added 4 new tests covering the situations of this PR.

Comments

The number of added and removed lines in this PR is significant because I had to move the default icon settings.


TODO

  • Use cargo fmt
  • Add necessary tests
  • Add changelog entry
  • Update default config/theme in README (if applicable)
  • Update man page at lsd/doc/lsd.md (if applicable)

@sudame sudame requested review from meain and Peltoche as code owners January 14, 2023 11:26
@codecov-commenter
Copy link

codecov-commenter commented Jan 14, 2023

Codecov Report

Merging #792 (4461ffc) into master (ea56a7c) will increase coverage by 0.05%.
The diff coverage is 100.00%.

@@            Coverage Diff             @@
##           master     #792      +/-   ##
==========================================
+ Coverage   86.57%   86.63%   +0.05%     
==========================================
  Files          44       44              
  Lines        4507     4527      +20     
==========================================
+ Hits         3902     3922      +20     
  Misses        605      605              
Impacted Files Coverage Δ
src/theme/icon.rs 100.00% <100.00%> (ø)

📣 We’re building smart automated test selection to slash your CI/CD build times. Learn more


#[derive(Debug, Deserialize, PartialEq, Eq)]
#[serde(rename_all = "kebab-case")]
#[serde(deny_unknown_fields)]
#[serde(default)]
pub struct IconTheme {
pub name: HashMap<String, String>,
pub extension: HashMap<String, String>,
#[serde(deserialize_with = "deserialize_by_name")]
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

If we are using a custom deserialize, I think we can avoid creating separate structs.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I totally agree with you. I updated the PR. (5e81871)

@sudame sudame force-pushed the fix/merge-icon-theme branch 2 times, most recently from 34bc764 to 5e81871 Compare January 23, 2023 06:44
@sudame sudame force-pushed the fix/merge-icon-theme branch from 5e81871 to 4461ffc Compare January 23, 2023 06:46
@zwpaper zwpaper mentioned this pull request Apr 22, 2023
6 tasks
@zwpaper
Copy link
Member

zwpaper commented Apr 22, 2023

thanks so much, @sudame, it works like a charm

@zwpaper zwpaper merged commit ff3e48e into lsd-rs:master Apr 22, 2023
@sudame sudame deleted the fix/merge-icon-theme branch April 30, 2023 08:19
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

Icon theme with overrides from config
4 participants