Crates.io | bark_rs |
lib.rs | bark_rs |
version | 0.1.2 |
created_at | 2025-08-22 14:20:39.362486+00 |
updated_at | 2025-08-26 10:56:52.008569+00 |
description | A feature-complete Rust client library for Bark push notification service with modular architecture |
homepage | https://github.com/ch1y1z1/bark_rs |
repository | https://github.com/ch1y1z1/bark_rs |
max_upload_size | |
id | 1806407 |
size | 125,903 |
一个功能完整的 Bark 推送服务 Rust 客户端库,采用清晰的模块化设计,支持所有官方 API 参数。
BarkMessage
) - 统一的消息构建,同步异步通用SyncBarkClient
) - 专门处理同步发送,零运行时依赖AsyncBarkClient
) - 专门处理异步发送,可选功能[dependencies]
# 只使用同步功能(默认使用 native-tls)
bark_rs = "0.1.2"
# 启用异步功能
bark_rs = { version = "0.1.2", features = ["async"] }
# 使用 rustls 替代 native-tls(更轻量,纯 Rust 实现)
bark_rs = { version = "0.1.2", default-features = false, features = ["rustls"] }
# 同时启用异步和 rustls
bark_rs = { version = "0.1.2", default-features = false, features = ["async", "rustls"] }
use bark_rs::{SyncBarkClient, Level};
fn main() -> Result<(), Box<dyn std::error::Error>> {
// 创建同步客户端
let client = SyncBarkClient::with_device_key("https://api.day.app", "your_device_key");
// 发送推送
let response = client
.message()
.title("测试标题")
.body("这是一个测试消息")
.send()?;
println!("推送成功: {}", response.message);
Ok(())
}
// Cargo.toml: bark_rs = { version = "0.1.0", features = ["async"] }
use bark_rs::{AsyncBarkClient, Level};
#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
let client = AsyncBarkClient::with_device_key("https://api.day.app", "your_device_key");
let response = client
.message()
.title("异步测试")
.body("这是一个异步消息")
.send()
.await?;
println!("异步推送成功: {}", response.message);
Ok(())
}
use bark_rs::{SyncBarkClient, BarkMessage, Level};
fn main() -> Result<(), Box<dyn std::error::Error>> {
// 构建消息(与发送客户端无关)
let message = BarkMessage::builder()
.title("独立消息")
.body("消息构建与发送完全分离")
.level(Level::Critical)
.sound("alarm")
.badge(1)
.build();
// 创建同步客户端并发送
let sync_client = SyncBarkClient::with_device_key("https://api.day.app", "your_key");
let response = sync_client.send(&message)?;
println!("发送成功: {}", response.message);
Ok(())
}
use bark_rs::{SyncBarkClient, Level};
fn main() -> Result<(), Box<dyn std::error::Error>> {
let client = SyncBarkClient::with_device_key("https://api.day.app", "your_device_key");
let response = client
.message()
.title("重要通知")
.subtitle("系统警告")
.body("服务器负载过高,请立即检查!")
.level(Level::Critical) // 重要警告级别
.volume(10) // 最大音量
.badge(1) // 应用角标
.call(true) // 重复播放铃声
.auto_copy(true) // 自动复制内容
.sound("alarm") // 警报铃声
.icon("https://example.com/alert.png") // 自定义图标
.group("系统监控") // 消息分组
.is_archive(true) // 保存到历史
.url("https://monitor.example.com") // 点击跳转链接
.id("server_alert_001") // 消息ID
.send()?;
println!("推送成功: {}", response.message);
Ok(())
}
let response = client
.message()
.device_keys(vec![
"device_key_1".to_string(),
"device_key_2".to_string(),
"device_key_3".to_string(),
])
.title("批量通知")
.body("这是一个发送给多个设备的消息")
.level(Level::TimeSensitive)
.send()?;
use bark_rs::{SyncBarkClient, AsyncBarkClient, BarkMessage, Level};
// 构建一个消息
let message = BarkMessage::builder()
.title("共享消息")
.body("这个消息可以被不同客户端使用")
.level(Level::Active)
.build();
// 同步发送
let sync_client = SyncBarkClient::new("https://api.day.app");
sync_client.send(&message)?;
// 异步发送(需要 async feature)
#[cfg(feature = "async")]
{
let async_client = AsyncBarkClient::new("https://api.day.app");
async_client.send(&message).await?;
}
SyncBarkClient
- 同步客户端,默认可用AsyncBarkClient
- 异步客户端,需要 async
featureBarkMessage::builder()
- 创建消息构建器BarkMessage::new()
- 同上,别名方法use bark_rs::{SyncBarkClient, BarkError};
match client.message().body("测试").send() {
Ok(response) => println!("成功: {}", response.message),
Err(BarkError::RequestError(e)) => println!("网络错误: {}", e),
Err(BarkError::MissingDeviceKey) => println!("缺少设备密钥"),
Err(BarkError::InvalidUrl) => println!("无效的URL"),
Err(BarkError::SerializationError(e)) => println!("序列化错误: {}", e),
}
# 同步示例
cargo run --example sync_client
cargo run --example message_builder
cargo run --example batch_push
cargo run --example error_handling
# 异步示例(需要 async feature)
cargo run --features async --example async_client
# 混合使用
cargo run --features async --example mixed_usage
async
- 启用异步功能和 AsyncBarkClient
native-tls
- 使用系统原生TLS实现(默认启用)rustls
- 使用pure-Rust的rustls TLS实现,更轻量且无需系统依赖该库支持两种TLS实现,您可以根据需求选择:
# 使用rustls的示例配置
[dependencies]
bark_rs = { version = "0.1.2", default-features = false, features = ["rustls"] }
# 测试同步功能
cargo test
# 测试异步功能
cargo test --features async
这个库遵循以下设计原则:
Level::Critical
: 重要警告,在静音模式下也会响铃Level::Active
: 默认值,系统会立即亮屏显示通知Level::TimeSensitive
: 时效性通知,可在专注状态下显示Level::Passive
: 仅添加到通知列表,不会亮屏提醒MIT License