Fix serialization issues

This commit is contained in:
Austen Adler 2021-05-12 23:04:54 -04:00
parent fbf6ecc9d4
commit 4d1badc36b
3 changed files with 22 additions and 21 deletions

View File

@ -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;

View File

@ -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),
}
}
}

View File

@ -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)
}
},