Serde: Rust'ta JSON ve Veri Serileştirme Standartı

  • Konbuyu başlatan Konbuyu başlatan irfo
  • Başlangıç tarihi Başlangıç tarihi

irfo

Moderatör
Top Poster Of Month
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.

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.
Rust
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​

ÖzellikAçıklama
HızKod üretimi (macro) kullandığı için çalışma zamanında çok hızlıdır.
EsneklikJSON, YAML, TOML, Bincode, CBOR gibi onlarca formatı destekler.
GüvenlikTip kontrolü sayesinde hatalı formatlanmış verileri anında reddeder.
 
Geri
Üst