use dcbor::{Simple, prelude::*};
fn main() {
let cbor: CBOR = 42.into();
let a = u8::try_from_cbor(&cbor).unwrap();
let b = i32::try_from_cbor(&cbor).unwrap();
let c = u64::try_from_cbor(&cbor).unwrap();
let d = f64::try_from_cbor(&cbor).unwrap();
println!("{a} {b} {c} {d}");
let cbor: CBOR = 42.0f64.into();
let as_f64 = f64::try_from_cbor(&cbor).unwrap();
let as_f32 = f32::try_from_cbor(&cbor).unwrap();
let as_int = i32::try_from_cbor(&cbor).unwrap();
println!("{as_f64} {as_f32} {as_int}");
let cbor: CBOR = 1.5f64.into();
let as_f32 = f32::try_from_cbor(&cbor).unwrap(); let as_int = i32::try_from_cbor(&cbor); println!("{as_f32} {as_int:?}");
print_numeric(&42.into()); print_numeric(&(-7).into()); print_numeric(&42.0f64.into()); print_numeric(&1.5f64.into()); }
fn print_numeric(cbor: &CBOR) {
match cbor.as_case() {
CBORCase::Unsigned(n) => println!("unsigned({n})"),
CBORCase::Negative(n) => println!("negative({})", -1 - (*n as i128)),
CBORCase::Simple(Simple::Float(n)) => println!("float({n})"),
_ => panic!("not numeric"),
}
}