Как использовать serde skip_serializing_if с пустыми срезами?

Можно сделать #[serde(skip_serializing_if = "Vec::is_empty")] для Vecs, но что эквивалентно для срезов?


person Steven Roose    schedule 16.07.2019    source источник
comment
Возможный дубликат Как вызвать метод в срезе явно без использования typedef?   -  person Stargateur    schedule 16.07.2019


Ответы (1)


Тип среза [T] также имеет метод is_empty. Вот как бы вы это назвали:

use serde::Serialize;

#[derive(Serialize)]
struct S<'a> {
    #[serde(skip_serializing_if = "<[_]>::is_empty")]
    slice: &'a [String]
}

fn main() {
    let s = S { slice: &[] };
    println!("{}", serde_json::to_string(&s).unwrap());
}
person dtolnay    schedule 16.07.2019