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