Field rename
- Rust kursu
- Orta seviye
- Ders 104/115
- 4 dk
#[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
fn main() {
// buraya yaz
}Örnek çözüm
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
#[serde(____ = "camelCase")]
struct Kullanici {
kayit_tarihi: String,
}
#[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 |