- Katılım
- 7 Ocak 2026
- Mesajlar
- 290
- Tepkime puanı
- 2
- Puanları
- 18
Rust dünyasında veri serileştirme (veriyi bir formata dönüştürme) ve tersi (deserileştirme) denilince akla gelen tek bir dev vardır: Serde (Serializing and Deserializing).
Serde, bir kütüphaneden ziyade bir ekosistemdir. Rust veri yapılarınızla (struct, enum) JSON, YAML, TOML veya Binary gibi formatlar arasında köprü kurar.
2. Kurulum ve
Serde'yi kullanmak için
Ini, TOML
Rust
Rust
Serde, bir kütüphaneden ziyade bir ekosistemdir. Rust veri yapılarınızla (struct, enum) JSON, YAML, TOML veya Binary gibi formatlar arasında köprü kurar.
1. Serde'nin Temel Mantığı
Serde, veriyi doğrudan bir formata (örneğin JSON'a) dönüştürmek yerine, veriyi önce soyut bir yapıya ayırır. Bu sayede aynı struct'ı sadece format kütüphanesini değiştirerek hem JSON hem de YAML olarak kaydedebilirsiniz.2. Kurulum ve derive Özelliği
Serde'yi kullanmak için Cargo.toml dosyanıza derive özelliğini eklemeniz gerekir. Ayrıca JSON ile çalışacaksanız serde_json kütüphanesine de ihtiyacınız vardır.Ini, TOML
Kod:
[dependencies]
serde = { version = "1.0", features = ["derive"] }
serde_json = "1.0"
3. Serialize ve Deserialize Kullanımı
Bir struct'ı serileştirilebilir hale getirmek için üzerine#[derive(Serialize, Deserialize)] eklemeniz yeterlidir.Rust
Kod:
use serde::{Serialize, Deserialize};
#[derive(Serialize, Deserialize, Debug)]
struct Kullanici {
ad: String,
yas: u8,
aktif: bool,
}
fn main() {
let kullanici = Kullanici {
ad: String::from("Can"),
yas: 25,
aktif: true,
};
// Struct -> JSON String (Serialization)
let json = serde_json::to_string(&kullanici).unwrap();
println!("JSON Çıktısı: {}", json);
// JSON String -> Struct (Deserialization)
let yeni_kullanici: Kullanici = serde_json::from_str(&json).unwrap();
println!("Geri dönen struct: {:?}", yeni_kullanici);
}
4. Field Attributes (Alan Özellikleri)
Bazen gelen verideki alan isimleri Rust isimlendirme standartlarına (snake_case) uymaz. Serde, bu durumu yönetmek için güçlü öznitelikler sunar:rename: JSON'daki isimlendirmeyi eşler.skip_serializing: Belirli bir alanı JSON'a dahil etmez.default: Eğer JSON'da o alan yoksa varsayılan bir değer atar.
Kod:
#[derive(Serialize, Deserialize)]
struct Ayarlar {
#[serde(rename = "API_KEY")] // JSON'da API_KEY, Rust'ta api_anahtari
api_anahtari: String,
#[serde(skip_serializing_if = "Option::is_none")]
token: Option<String>,
}
5. Enum'lar ve JSON
Serde, Rust enum'larını JSON'a dönüştürürken çok esnektir. Varsayılan olarak "Externally Tagged" (etiket dışarıda) formatını kullanır.Rust
Kod:
#[derive(Serialize, Deserialize)]
#[serde(tag = "tip", content = "veri")] // Internally Tagged yapısı
enum Mesaj {
Metin(String),
Sayi(i32),
}
// JSON çıktısı: {"tip": "Metin", "veri": "Merhaba"}
Özet
| Özellik | Açıklama |
| Hız | Kod üretimi (macro) kullandığı için çalışma zamanında çok hızlıdır. |
| Esneklik | JSON, YAML, TOML, Bincode, CBOR gibi onlarca formatı destekler. |
| Güvenlik | Tip kontrolü sayesinde hatalı formatlanmış verileri anında reddeder. |