1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57
use bigdecimal::BigDecimal;
use serde::{Deserialize, Serialize};
mod primitive;
#[derive(Clone, Debug, Default, PartialEq, Eq, Serialize, Deserialize)]
pub struct Number {
pub hint: String,
pub value: BigDecimal,
}
// impl FromStr for Number {
// type Err = ParseBigDecimalError;
//
// /// ```js
// /// +1
// /// -1
// /// +1.0
// /// -1.0m
// /// +2**5 => 2 * 10^5
// /// ```
// fn from_str(s: &str) -> Result<Self, Self::Err> {
// let (sign, rest) = match s.split_once(|c| c == '+' || c == '-') {
// // `+1`,
// Some(("+", rest)) => (Sign::NoSign, rest),
// // `-1`
// Some(("-", rest)) => (Sign::NoSign, rest),
// _ => (Sign::NoSign, s),
// };
// match s.split_once("**") {
// // `2**5 => 2*10^5`,
// Some((lhs, rhs)) => {
// let lhs = match BigDecimal::from_str(lhs) {
// Ok(o) => {o}
// Err(_) => {
// ParseIntError::from()
// }
// };
// match rhs.split_once(|c| !c.is_ascii_digit()) {
// Some(_) => {}
// None => {}
// }
// let exp = u32::from_str()?;
//
//
// 10.pow()
// }
// _ => match rest.split_once(|c| !c.is_ascii_digit()) {
// None => {}
// Some(_) => {}
// },
// };
//
// let value = BigDecimal::from_str_radix(s, 10)?;
// Ok(Number { hint: "".to_string(), value })
// }
// }