refactor(app): Making impossible states impossible #265
+544
−386
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Motivation
What's changed
Made impossible states impossible.
At first, I show main change point.
Before
After
By this change, we can no longer express impossible states like below.
When
app_state
isAppState::ShouldQuit
, the app need not have any data.The above code become like this:
Good effect of this change
This makes some good effect:
1. Improve readability
It made readability improved because the data structure describes the application state more precisely.
This may good especially for the person who are new to this project too.
2. Reduce the chance of potential bugs because invalid data accesses can't happen.
As the title says.
3. Remove unnecessary fields.
This is not huge advantage for now, but the effort for testing will not increase even though the data structure grows.
Also, this makes refactoring easier because only necessary fields are defined.
Minor changes
app.rs
.