Как поместить свою структуру в 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 или что-то в этом роде, обычно намного компактнее, но тогда все, что находится на другой стороне, должно иметь возможность интерпретировать формат.