https://github.com/raiden-rs/raiden-sqs
[WIP] ⚡ Ergonomic SQS library for Rust.
https://github.com/raiden-rs/raiden-sqs
aws rust sqs
Last synced: 3 months ago
JSON representation
[WIP] ⚡ Ergonomic SQS library for Rust.
- Host: GitHub
- URL: https://github.com/raiden-rs/raiden-sqs
- Owner: raiden-rs
- Created: 2020-07-26T14:27:18.000Z (almost 6 years ago)
- Default Branch: master
- Last Pushed: 2026-03-14T20:13:01.000Z (4 months ago)
- Last Synced: 2026-03-15T05:54:01.353Z (4 months ago)
- Topics: aws, rust, sqs
- Language: Rust
- Homepage:
- Size: 108 KB
- Stars: 5
- Watchers: 1
- Forks: 0
- Open Issues: 22
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
README

Ergonomic SQS library for Rust.
---
[![status]][actions]
[status]: https://img.shields.io/github/workflow/status/raiden-rs/raiden-sqs/CI/master
[actions]: https://github.com/raiden-rs/raiden-sqs/actions?query=branch%3Amaster
## Status
Underdevelopment. No working examples.
## Development
### Test
```
cd test-suite
cargo test
```
## Supported APIs
- [ ] AddPermission
- [ ] ChangeMessageVisibility
- [ ] ChangeMessageVisibilityBatch
- [ ] CreateQueue
- [ ] DeleteMessage
- [ ] DeleteMessageBatch
- [ ] DeleteQueue
- [ ] GetQueueAttributes
- [ ] GetQueueUrl
- [ ] ListDeadLetterSourceQueues
- [ ] ListQueues
- [ ] ListQueueTags
- [ ] PurgeQueue
- [ ] ReceiveMessage
- [ ] RemovePermission
- [ ] SendMessage
- [ ] SendMessageBatch
- [ ] SetQueueAttributes
- [ ] TagQueue
- [ ] UntagQueue
## Code (not working example)
```rust
use raiden_core::*;
use raiden_sqs::*;
#[derive(Sqs, Serialize, Debug)]
#[sqs(queue_name = "MyFirstQueue", region = "us-east-1")]
pub struct MyMessage {
name: String,
greetings: String,
}
#[derive(Sqs, Serialize, Debug)]
#[sqs(queue_name = "MoreQueue", ops_prefix = "sqs_", ops_suffix = "_message", region = "us-east-1")]
pub struct MoreMessage {
name: String,
more: String,
}
#[derive(Sqs, Serialize, Debug)]
#[sqs(queue_name = "MinimumQueue", ops = ("receive", "delete"))]
pub struct MinimumMessage {
name: String,
ops: String,
}
fn main() {
let mut rt = tokio::runtime::Runtime::new().unwrap();
async fn run() {
// Send a message
let res = MyMessage {
name: "kuy".into(),
greetings: "Hello, SQS!".into(),
}.send().await.unwrap();
println!("Sent: message_id={}", res.message_id);
// Receive a message
let res = MyMessage::receive().await.unwrap();
println!("Received: {:?}", res.message);
// Delete a message
res.delete().await;
// Send messages in batch
let messages = vec![...];
let ret = MyMessage::batch_send(&messages).await.unwrap();
// Delete messages in batch
let handles = vec![...];
let ret = MyMessage::batch_delete(&handles).await.unwrap();
// Send a message with delay
MyMessage {
name: "kuy".into(),
greetings: "Goodbye, SQS!".into(),
}.send_with().delay(30).await.unwrap();
// Send a message with attribute/meta data
MyMessage {
name: "kuy".into(),
greetings: "Goodbye, SQS!".into(),
}.send_with().attr("System", "Solar").attr("Universe", 42).await.unwrap();
// Send a plain text message
MyMessage::create("I'm not JSON".into()).send().await.unwrap();
MyMessage::create("Delayed message".into()).send_with().delay(30).await.unwrap();
// Send a message with overriding config
MyMessage {
name: "kuy".into(),
greetings: "Hello, Tokyo!".into(),
}.send_with().config(&opt).await.unwrap();
// Rename operation methods to avoid conflict
let res = MoreMessage {
name: "kuy".into(),
more: "YES IS MORE".into(),
}.sqs_send_message().await.unwrap();
let res = MoreMessage::sqs_receive_message().await.unwrap();
}
rt.block_on(run());
}
```
## Memo
- Strategy for error handling and retry policy
- Derive `Into` trait to convert struct to String
- Delay
- Batch ops
- Support simple client to send plain text
- Type checking for FIFO
- Message attributes
- Automatic deletion (waiting for async Drop trait)
- Feature flag to disable serialize/deserialize