Fix serialization issues
This commit is contained in:
parent
fbf6ecc9d4
commit
4d1badc36b
16
src/calc.rs
16
src/calc.rs
@ -262,28 +262,28 @@ impl Calculator {
|
||||
'r' => self.angle_mode = CalculatorAngleMode::Radians,
|
||||
'g' => self.angle_mode = CalculatorAngleMode::Grads,
|
||||
'_' => self.display_mode = CalculatorDisplayMode::Default,
|
||||
',' => self.display_mode = CalculatorDisplayMode::Separated(','),
|
||||
' ' => self.display_mode = CalculatorDisplayMode::Separated(' '),
|
||||
's' => self.display_mode = CalculatorDisplayMode::Scientific(DEFAULT_PRECISION),
|
||||
',' => self.display_mode = CalculatorDisplayMode::Separated{separator: ','},
|
||||
' ' => self.display_mode = CalculatorDisplayMode::Separated{separator: ' '},
|
||||
's' => self.display_mode = CalculatorDisplayMode::Scientific{precision: DEFAULT_PRECISION},
|
||||
'S' => {
|
||||
let precision = self.checked_get(0)? as usize;
|
||||
if precision > MAX_PRECISION {
|
||||
return Err(CalculatorError::PrecisionTooHigh);
|
||||
}
|
||||
self.display_mode = CalculatorDisplayMode::Scientific(self.pop_usize()?)
|
||||
self.display_mode = CalculatorDisplayMode::Scientific{precision: self.pop_usize()?}
|
||||
}
|
||||
'e' => {
|
||||
self.display_mode = CalculatorDisplayMode::Engineering(DEFAULT_PRECISION)
|
||||
self.display_mode = CalculatorDisplayMode::Engineering{precision: DEFAULT_PRECISION}
|
||||
}
|
||||
'E' => {
|
||||
let precision = self.checked_get(0)? as usize;
|
||||
if precision > MAX_PRECISION {
|
||||
return Err(CalculatorError::PrecisionTooHigh);
|
||||
}
|
||||
self.display_mode = CalculatorDisplayMode::Engineering(self.pop_usize()?)
|
||||
self.display_mode = CalculatorDisplayMode::Engineering{precision: self.pop_usize()?}
|
||||
}
|
||||
'f' => self.display_mode = CalculatorDisplayMode::Fixed(DEFAULT_PRECISION),
|
||||
'F' => self.display_mode = CalculatorDisplayMode::Fixed(self.pop_usize()?),
|
||||
'f' => self.display_mode = CalculatorDisplayMode::Fixed{precision: DEFAULT_PRECISION},
|
||||
'F' => self.display_mode = CalculatorDisplayMode::Fixed{precision: self.pop_usize()?},
|
||||
_ => return Err(CalculatorError::NoSuchSetting(c)),
|
||||
};
|
||||
self.state = CalculatorState::Normal;
|
||||
|
@ -73,22 +73,23 @@ impl fmt::Display for CalculatorAngleMode {
|
||||
|
||||
#[derive(Clone, Debug, Serialize, Deserialize)]
|
||||
#[serde(tag = "display_mode")]
|
||||
// Could also have added content="precision"
|
||||
pub enum CalculatorDisplayMode {
|
||||
Default,
|
||||
Separated(char),
|
||||
Scientific(usize),
|
||||
Engineering(usize),
|
||||
Fixed(usize),
|
||||
Separated { separator: char },
|
||||
Scientific { precision: usize },
|
||||
Engineering { precision: usize },
|
||||
Fixed { precision: usize },
|
||||
}
|
||||
|
||||
impl fmt::Display for CalculatorDisplayMode {
|
||||
fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
|
||||
match self {
|
||||
CalculatorDisplayMode::Default => write!(f, "DEF"),
|
||||
CalculatorDisplayMode::Separated(c) => write!(f, "SEP({})", c),
|
||||
CalculatorDisplayMode::Scientific(p) => write!(f, "SCI({})", p),
|
||||
CalculatorDisplayMode::Engineering(p) => write!(f, "ENG({})", p),
|
||||
CalculatorDisplayMode::Fixed(p) => write!(f, "FIX({})", p),
|
||||
CalculatorDisplayMode::Separated{separator} => write!(f, "SEP({})", separator),
|
||||
CalculatorDisplayMode::Scientific{precision} => write!(f, "SCI({})", precision),
|
||||
CalculatorDisplayMode::Engineering{precision} => write!(f, "ENG({})", precision),
|
||||
CalculatorDisplayMode::Fixed{precision} => write!(f, "FIX({})", precision),
|
||||
}
|
||||
}
|
||||
}
|
||||
|
10
src/main.rs
10
src/main.rs
@ -119,16 +119,16 @@ fn main() -> Result<(), Box<dyn Error>> {
|
||||
let content = vec![Spans::from(Span::raw(
|
||||
match app.calculator.get_display_mode() {
|
||||
CalculatorDisplayMode::Default => format!("{:>2}: {}", i, *m),
|
||||
CalculatorDisplayMode::Separated(c) => {
|
||||
format!("{:>2}: {}", i, fmt_separated(*m, *c))
|
||||
CalculatorDisplayMode::Separated{separator} => {
|
||||
format!("{:>2}: {}", i, fmt_separated(*m, *separator))
|
||||
}
|
||||
CalculatorDisplayMode::Scientific(precision) => {
|
||||
CalculatorDisplayMode::Scientific{precision} => {
|
||||
format!("{:>2}: {}", i, fmt_scientific(*m, *precision))
|
||||
}
|
||||
CalculatorDisplayMode::Engineering(precision) => {
|
||||
CalculatorDisplayMode::Engineering{precision} => {
|
||||
format!("{:>2}: {}", i, fmt_engineering(*m, *precision))
|
||||
}
|
||||
CalculatorDisplayMode::Fixed(precision) => {
|
||||
CalculatorDisplayMode::Fixed{precision} => {
|
||||
format!("{:>2}: {:.precision$}", i, m, precision = precision)
|
||||
}
|
||||
},
|
||||
|
Loading…
Reference in New Issue
Block a user