У меня есть такая структура:
#[derive(Serialize, Deserialize)]
struct Thing {
pub small_header: Header,
pub big_body: Body,
}
Я хочу сериализовать эту Thing
для отправки по сети.У меня уже есть Body
, но я не могу его переместить (представьте, что я что-то с ним делаю, и время от времени я получаю команду временно остановить то, что я делаю, и отправить егокакие бы данные у меня были сейчас) и я не могу скопировать их (это слишком много, возможно, сотни мегабайт).
Так что я бы хотел, чтобы Серде просто одолжил тот, который у меня есть длясериализовать его, поскольку для этого не нужно перемещать его в структуру.Если я переписываю Thing
, чтобы получить ссылку, я, очевидно, не могу получить Deserialize
!
Обходное решение, которое я использовал, просто использует Arc<Body>
в моем коде, чтобы я мог работатьс телом в моей обычной логике, и когда мне нужно его сериализовать, я могу просто сделать дешевый клон и поместить Arc<Body>
в структуру для сериализации.Во время десериализации Serde создаст новый Arc
с повторным счетом 1.
Это все еще включает разбрасывание Arc
по всему моему коду, что не очень хорошо, не говоря уже о ненужной (хотя и незначительной) среде выполненияСтоимость.Какое правильное решение для этого варианта использования?
Самое смешное, что если бы мне не нужно было отправлять заголовок, то это было бы не проблема, поскольку я мог бы сериализовать по ссылке и десериализовать по значению, но наличие заголовка делает это невозможным.Мне кажется, что я что-то упускаю из-за того, как Серде берет данные здесь ...