CodeBlanks Logo Icon CodeBlanks

Field rename

#[serde(rename)] ile alan adlandırma yaparsın.

Field rename

Rust alanları snake_case, birçok JSON API'si ise camelCase kullanır. serde öznitelikleri adları kodu değiştirmeden eşler:

#[derive(Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
struct Kullanici {
    ad: String,
    kayit_tarihi: String,          // "kayitTarihi"
    #[serde(rename = "e-posta")]
    eposta: String,                // "e-posta"
}

rename_all tüm alanlara, rename tek bir alana uygulanır. Seçenekler: camelCase, PascalCase, kebab-case, SCREAMING_SNAKE_CASE.

Dönüşümü elle yazmak

rename_all = "camelCase"'in yaptığı dönüşüm basittir: alt çizgiyi at, sonraki harfi büyüt:

fn camel(s: &str) -> String {
    let mut sonuc = String::new();
    let mut buyut = false;
    for c in s.chars() {
        if c == '_' {
            buyut = true;
        } else if buyut {
            sonuc.extend(c.to_uppercase());
            buyut = false;
        } else {
            sonuc.push(c);
        }
    }
    sonuc
}

Uygulama camelCase dönüşümü

Yukarıdaki camel fonksiyonunu yaz. "kayit_tarihi", "ad" ve "son_giris_zamani" için sonuçları boşlukla yazdır.

Başlangıç kodu

main.rs
fn main() {
    // buraya yaz
}

Örnek çözüm

main.rs
fn camel(s: &str) -> String {
    let mut sonuc = String::new();
    let mut buyut = false;
    for c in s.chars() {
        if c == '_' {
            buyut = true;
        } else if buyut {
            sonuc.extend(c.to_uppercase());
            buyut = false;
        } else {
            sonuc.push(c);
        }
    }
    sonuc
}

fn main() {
    println!("{} {} {}", camel("kayit_tarihi"), camel("ad"), camel("son_giris_zamani"));
}

Beklenen çıktı

kayitTarihi ad sonGirisZamani

Soru ve cevaplar

Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.

1 <code>#[serde(alias = "name")]</code> ne işe yarar?

  • Yazarken iki ad üretir
  • Derlenmez
  • Okurken ek bir adı da kabul eder; yazarken asıl adı kullanır Doğru cevap
  • Alanı gizler

Açıklama: Eski ve yeni JSON biçimlerini aynı anda okuyabilmek için kullanışlıdır.

2 Toplu yeniden adlandır

Soru
#[serde(____ = "camelCase")]
struct Kullanici {
    kayit_tarihi: String,
}
Cevap
#[serde(rename_all = "camelCase")]
struct Kullanici {
    kayit_tarihi: String,
}

Açıklama: rename_all bir adlandırma kuralını tüm alanlara uygular.

3 Alan ve camelCase JSON adı

Kavram Anlamı
ad ad
kayit_tarihi kayitTarihi
son_giris_zamani sonGirisZamani
#[serde(rename = "e-posta")] e-posta

Orta seviye bölümündeki tüm dersler