Как поместить свою структуру в PutRecordInput для AWS Kinesis в Rust?

Я очень новичок в Rust и пытаюсь заставить работать код, который может проталкивать запись в поток kinesis firehose.

struct AuditRecord{
    user_id : String,
    request : Value,
    request_id : String,
    timestamp_raw : i64,
}
...
let client = KinesisClient::new(Region::UsEast1);
let record = PutRecordInput{
    partition_key : requestId.to_string(),
    stream_name : streamName,
    data : auditRecord
};

Когда я попробовал это, он хочет, чтобы данные были вbytes::bytes::Bytes но мне неясно, как преобразовать мою структуру в bytes::bytes::Bytesпредставление. Приветствуются любые примеры того, как это сделать.

Для пояснения я использую

rusoto = "0.24.2"
rusoto_kinesis = "0.43.0"
rusoto_core = "0.43.0"

Также, если кто-нибудь знает хорошее место, чтобы увидеть реальные примеры того, как использовать rusoto для общения с различными объектами AWS, это будет полезно.

1 ответ

Как заявляли другие люди, это действительно зависит от вашего выбора сериализации. Если вы выбрали кодировку на основе строк, такую ​​как xml или json, вы можете использовать что-то вроде:

let msg: String = "some message".to_string();

let record = PutRecordInput{
    partition_key : requestId.to_string(),
    stream_name : streamName,
    data : msg.into()
};

// or it could be 
let record = PutRecordInput{
    partition_key : requestId.to_string(),
    stream_name : streamName,
    data : Bytes::from(msg)
};

Где вы заменяете "какое-то сообщение" на выбранную вами стерилизацию строки.

Хотя технически использование некоторого двоичного кодирования, такого как protobuf или что-то в этом роде, обычно намного компактнее, но тогда все, что находится на другой стороне, должно иметь возможность интерпретировать формат.

Другие вопросы по тегам