รูปแบบอื่น
TOML, YAML, bincode
รูปแบบอื่น เป็นบทเรียน Learn Rust Coding ฟรีบน CoddyKit นี่คือบทเรียนที่ 4 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน Learn Rust Coding และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส Learn Rust Coding มีบทเรียนทั้งหมด 4 บทเรียน
นอกเหนือจาก JSON
แกนหลักของ serde ไม่ผูกกับรูปแบบใด ดังนั้น struct เดิมที่ derive ไว้จึงใช้งานกับหลายรูปแบบได้ เพียงเปลี่ยน crate ของรูปแบบข้อมูล
- TOML สำหรับการตั้งค่า
- YAML สำหรับข้อมูลที่อ่านเข้าใจง่าย
- bincode สำหรับข้อมูลไบนารีขนาดกะทัดรัด
struct เดียว หลายรูปแบบ
คุณกำหนด struct เพียงครั้งเดียว crate ของแต่ละรูปแบบจะมี to_string / from_str ที่เทียบเท่ากัน โดยทำงานกับ impl ของ Serialize / Deserialize ชุดเดียวกัน
use serde::{Serialize, Deserialize};
#[derive(Serialize, Deserialize)]
struct Config {
name: String,
port: u16,
}TOML
TOML เป็นรูปแบบยอดนิยมสำหรับการตั้งค่า (ตัว Cargo.toml เองก็ใช้รูปแบบนี้) crate toml ใช้ทำซีเรียลไลซ์และแยกวิเคราะห์ข้อมูลดังกล่าว
use serde::Serialize;
#[derive(Serialize)]
struct Config { name: String, port: u16 }
fn to_toml(c: &Config) -> String {
toml::to_string(c).unwrap()
}แยกวิเคราะห์ TOML
อ่านการตั้งค่า TOML กลับมาเป็น struct ด้วย toml::from_str
use serde::Deserialize;
#[derive(Deserialize)]
struct Config { name: String, port: u16 }
fn parse(s: &str) -> Config {
toml::from_str(s).unwrap()
}YAML
YAML เหมาะกับข้อมูลที่มนุษย์แก้ไขและมีการซ้อนกัน ใช้ crate เช่น serde_yaml ซึ่งมีรูปแบบ API เดียวกัน
use serde::Serialize;
#[derive(Serialize)]
struct Config { name: String, port: u16 }
fn to_yaml(c: &Config) -> String {
serde_yaml::to_string(c).unwrap()
}bincode
bincode เป็นรูปแบบไบนารีขนาดกะทัดรัด เหมาะสำหรับแคชหรือการส่งข้อมูลผ่านเครือข่ายเมื่อขนาดและความเร็วสำคัญ และไม่มีมนุษย์ต้องอ่านข้อมูลนั้น
use serde::Serialize;
#[derive(Serialize)]
struct Config { name: String, port: u16 }
fn to_bytes(c: &Config) -> Vec<u8> {
bincode::serialize(c).unwrap()
}การเลือกรูปแบบ
เลือกตามกลุ่มผู้ใช้งาน:
- การตั้งค่าที่มนุษย์อ่านและมีการซ้อนกัน: TOML หรือ YAML
- เว็บ API: JSON
- การจัดเก็บหรือส่งข้อมูลไบนารีภายใน: bincode
จำลองการเลือกรูปแบบ
การตัดสินใจก็คือการจับคู่กรณีใช้งานกับรูปแบบข้อมูล ตัวอย่างที่รันได้นี้จำลองตรรกะการเลือกดังกล่าว
fn pick_format(use_case: &str) -> &str {
match use_case {
"config" => "TOML",
"api" => "JSON",
"cache" => "bincode",
_ => "JSON",
}
}
fn main() {
println!("{}", pick_format("config"));
println!("{}", pick_format("cache"));
println!("{}", pick_format("api"));
}ส่งไบต์ไปกลับ
รูปแบบไบนารีสามารถส่งไปกลับได้: ทำซีเรียลไลซ์เป็นไบต์ แล้วดีซีเรียลไลซ์กลับมาเป็น struct เดิม ตัวอย่างที่รันได้นี้จำลองแนวคิดการส่งไปกลับด้วยความยาวของไบต์
fn encode(name: &str) -> Vec<u8> {
name.as_bytes().to_vec()
}
fn decode(bytes: &[u8]) -> String {
String::from_utf8(bytes.to_vec()).unwrap()
}
fn main() {
let bytes = encode("Alice");
println!("len={}", bytes.len());
println!("back={}", decode(&bytes));
}ลักษณะเฉพาะของแต่ละรูปแบบ
รูปแบบข้อมูลมีความสามารถต่างกัน TOML ไม่อนุญาตค่า null และต้องใช้ตารางสำหรับการซ้อนกัน YAML รองรับ anchor ส่วน bincode ไม่บอกชนิดข้อมูลในตัว ดังนั้นทั้งสองฝั่งต้องใช้ชนิดข้อมูลเดียวกัน
แอตทริบิวต์ยังคงใช้งานได้
แอตทริบิวต์ #[serde(...)] ที่คุณเรียนรู้มา ได้แก่ rename, default และ skip ยังคงทำงานได้กับทุกรูปแบบ เพราะทำงานในชั้น serde ไม่ใช่ชั้นของรูปแบบข้อมูล
use serde::Serialize;
#[derive(Serialize)]
#[serde(rename_all = "kebab-case")]
struct Config { max_connections: u32 }ตรวจสอบความเข้าใจ
ทดสอบความเข้าใจของคุณเกี่ยวกับรูปแบบข้อมูลอื่น ๆ
สรุป
คุณได้เรียนรู้เกี่ยวกับรูปแบบข้อมูลอื่น ๆ ของ serde:
- struct เดียวที่ derive แล้วใช้ได้กับ TOML, YAML, JSON และ bincode
- crate ของแต่ละรูปแบบมี API ลักษณะคุ้นเคยอย่าง
to_string/from_str - เลือกตามกลุ่มผู้ใช้: การตั้งค่า, API หรือการจัดเก็บไบนารี
- แอตทริบิวต์ของ serde ใช้ได้กับทุกรูปแบบ
บทเรียน Serde และชุดบทเรียน Rust จบลงเพียงเท่านี้
คำถามที่พบบ่อย
บทเรียน “รูปแบบอื่น” ฟรีหรือไม่
ใช่ — ข้อความเต็มของ “รูปแบบอื่น” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส Learn Rust Coding ให้อัปเกรดเป็น CoddyKit PRO คอร์ส Learn Rust Coding มีบทเรียนทั้งหมด 4 บทเรียน
คุณจะเรียนรู้อะไรในบทเรียน “รูปแบบอื่น”
TOML, YAML, bincode คุณปฏิบัติ Learn Rust Coding ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน
คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน Learn Rust Coding หรือไม่
ไม่จำเป็นต้องมีประสบการณ์มาก่อน Learn Rust Coding บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 4 จากทั้งหมด 4 บทเรียน
บทเรียน “รูปแบบอื่น” ใช้เวลานานแค่ไหน
บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย
ฉันเขียนและรันโค้ดในบทเรียน Learn Rust Coding นี้ได้ไหม
ได้ บทเรียน Learn Rust Coding ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ