#rust #serde
Вопрос:
Я следую руководству по реализации сериализатора с serde
помощью . Это дает базовую реализацию сериализатора JSON с использованием Serde. Скажите , что я хочу сериализовать только целые числа u8
без знака, u16
и u32
. Можно ли как-то указать это ограничение и выдавать ошибки всякий раз , когда пользователь пытается сериализовать любой другой тип, например string
, f32
и т. Д. ?
Я, наверное, мог бы написать
fn serialize_string(self, v: string) -> Result<()> {
return Err(Error::Message("Undefined".to_owned()));
}
fn serialize_f32(self, v: f32) -> Result<()> {
return Err(Error::Message("Undefined".to_owned()));
}
/* and so forth */
Но это кажется слишком многословным.
И можно ли определить протокол для сериализации пользовательских типов? Например, у меня может быть структура Point
, содержащая две координаты x
и y
. Я хочу сериализовать Point
в сжатом формате, как описано здесь: https://bitcoin.stackexchange.com/a/84588, Т. е. сериализуйте первую x
координату как любое другое целое число без знака, но добавьте небольшой префикс, чтобы указать, y
четная или нечетная координата. Затем можно вывести y
из x
, используя префикс (условный).