Вы можете использовать атрибут untagged
, который даст желаемый результат.Вам не нужно реализовывать Serialize
самостоятельно с этим:
#[derive(Debug, Serialize)]
#[serde(untagged)]
enum TValue<'a> {
String(&'a str),
Int(&'a i32),
}
Если вы хотите реализовать Serialize
самостоятельно, я думаю, что вы хотите пропустить свой вариант, поэтому вам не следует использовать serialize_newtype_variant()
как это выставляет ваш вариант.Вы должны использовать serialize_str()
и serialize_i32()
напрямую:
impl<'a> Serialize for TValue<'a> {
fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
where
S: Serializer,
{
match *self {
TValue::String(s) => serializer.serialize_str(s),
TValue::Int(i) => serializer.serialize_i32(*i),
}
}
}
. Получит желаемый результат:
{"offset":0}