basic_types/
basic_types.rs

1//! 基本类型使用示例
2//!
3//! 演示 NSON 支持的所有数字类型
4
5use nson::{Array, Map, Value, m};
6
7fn main() {
8    println!("=== NSON 基本类型示例 ===\n");
9
10    // 1. 所有数字类型
11    let numbers = m! {
12        "i8": -128i8,           // 8位有符号整数
13        "u8": 255u8,            // 8位无符号整数
14        "i16": -32768i16,       // 16位有符号整数
15        "u16": 65535u16,        // 16位无符号整数
16        "i32": -2147483648i32,  // 32位有符号整数
17        "u32": 4294967295u32,   // 32位无符号整数
18        "i64": -9223372036854775808i64,  // 64位有符号整数
19        "u64": 18446744073709551615u64,  // 64位无符号整数
20        "f32": 3.14159f32,      // 32位浮点数
21        "f64": 2.718281828459045f64,  // 64位浮点数
22    };
23
24    println!("数字类型 Map:");
25    println!("{}\n", numbers);
26
27    // 2. 编码和解码
28    let bytes = numbers.to_bytes().unwrap();
29    println!("编码后大小: {} 字节", bytes.len());
30
31    let decoded = Map::from_bytes(&bytes).unwrap();
32    println!("解码成功: {:?}\n", decoded == numbers);
33
34    // 3. 类型访问
35    println!("访问各种类型:");
36    println!("  i8 value: {:?}", decoded.get_i8("i8"));
37    println!("  u8 value: {:?}", decoded.get_u8("u8"));
38    println!("  i16 value: {:?}", decoded.get_i16("i16"));
39    println!("  u16 value: {:?}", decoded.get_u16("u16"));
40    println!("  i32 value: {:?}", decoded.get_i32("i32"));
41    println!("  u32 value: {:?}", decoded.get_u32("u32"));
42    println!("  i64 value: {:?}", decoded.get_i64("i64"));
43    println!("  u64 value: {:?}", decoded.get_u64("u64"));
44    println!("  f32 value: {:?}", decoded.get_f32("f32"));
45    println!("  f64 value: {:?}", decoded.get_f64("f64"));
46
47    println!("\n=== 数组中的类型 ===\n");
48
49    // 4. 数组中使用不同类型
50    let mixed_array = Array::from_vec(vec![
51        Value::I8(-10),
52        Value::U8(200),
53        Value::I16(-1000),
54        Value::U16(50000),
55        Value::F32(1.5),
56        Value::from("text"),
57    ]);
58
59    println!("混合类型数组: {:?}", mixed_array);
60
61    let array_bytes = mixed_array.to_bytes().unwrap();
62    let decoded_array = Array::from_bytes(&array_bytes).unwrap();
63    println!("数组解码成功: {:?}\n", decoded_array == mixed_array);
64
65    // 5. 类型大小比较
66    println!("=== 类型存储大小 ===");
67    let size_demo = m! {
68        "i8": -1i8,
69        "i16": -1i16,
70        "i32": -1i32,
71        "i64": -1i64,
72    };
73
74    for (key, value) in size_demo.iter() {
75        println!("{}: {} 字节 + 1字节类型标记", key, value.bytes_size());
76    }
77}