https://github.com/angrymane/vehicle-client
https://github.com/angrymane/vehicle-client
Last synced: about 1 year ago
JSON representation
- Host: GitHub
- URL: https://github.com/angrymane/vehicle-client
- Owner: AngryMane
- Created: 2025-06-15T12:49:11.000Z (about 1 year ago)
- Default Branch: main
- Last Pushed: 2025-06-21T15:58:59.000Z (about 1 year ago)
- Last Synced: 2025-06-21T16:38:12.217Z (about 1 year ago)
- Language: Rust
- Size: 21.5 KB
- Stars: 0
- Watchers: 0
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
README
# Vehicle Shadow Client Library
Vehicle Signal Shadowサービスのための高レベルクライアントライブラリです。gRPCクライアントの接続管理、JSON解析、値フォーマットなどの共通機能を提供します。
## 機能
- **高レベルクライアント**: 簡単に使用できるVehicleShadowClient
- **JSON解析**: JSON文字列からState/Valueオブジェクトへの変換
- **値フォーマット**: Valueオブジェクトの人間が読みやすい文字列への変換
- **エラーハンドリング**: 統一されたエラー型と適切なエラー変換
- **型安全性**: Rustの型システムを活用した安全なAPI
## 使用方法
### 基本的な使用例
```rust
use vehicle_shadow_client::{VehicleShadowClient, format_signal};
#[tokio::main]
async fn main() -> Result<(), Box> {
// サーバーに接続
let mut client = VehicleShadowClient::connect("http://localhost:50051").await?;
// シグナルを取得
let response = client.get_signals(vec!["Vehicle.Speed".to_string()]).await?;
if response.success {
for signal in response.signals {
println!("{}", format_signal(&signal));
}
}
// シグナル値を設定
let response = client.set_signal(
"Vehicle.Speed".to_string(),
"60.5"
).await?;
// 複数のシグナルを設定
let signals = vec![
("Vehicle.Speed".to_string(), "60.5".to_string()),
("Vehicle.Engine.RPM".to_string(), "2000".to_string()),
];
let response = client.set_signals(signals).await?;
// シグナルの購読
let mut stream = client.subscribe(vec!["Vehicle.Speed".to_string()]).await?;
while let Some(response) = stream.message().await? {
if let Some(signal) = response.signal {
println!("Update: {}", signal.path);
}
}
Ok(())
}
```
### JSON解析
```rust
use vehicle_shadow_client::{parse_state_from_json, parse_value_from_json};
// 単純な値の解析
let value = parse_value_from_json("42")?;
let value = parse_value_from_json("\"hello\"")?;
let value = parse_value_from_json("true")?;
let value = parse_value_from_json("[1, 2, 3]")?;
// Stateオブジェクトの解析
let state = parse_state_from_json("{\"value\": 60.5, \"capability\": true}")?;
let state = parse_state_from_json("60.5")?; // 単純な値もStateとして解析可能
```
### 値フォーマット
```rust
use vehicle_shadow_client::{format_value, format_signal};
// Valueオブジェクトのフォーマット
let formatted = format_value(&value);
println!("Value: {}", formatted);
// Signalオブジェクトのフォーマット
let formatted = format_signal(&signal);
println!("Signal:\n{}", formatted);
```
## API リファレンス
### VehicleShadowClient
#### メソッド
- `connect(server_url: &str) -> Result`: サーバーに接続してクライアントを作成
- `get_signals(paths: Vec) -> Result`: 指定されたパスのシグナルを取得
- `set_signal(path: String, value_json: &str) -> Result`: 単一のシグナル値を設定
- `set_signals(signals: Vec<(String, String)>) -> Result`: 複数のシグナル値を設定
- `subscribe(paths: Vec) -> Result>`: シグナル変更を購読
- `unsubscribe(paths: Vec) -> Result`: 購読を解除
- `get_client() -> &mut SignalServiceClient`: 低レベルクライアントへのアクセス
### パーサー関数
- `parse_state_from_json(json_str: &str) -> Result`: JSON文字列をStateオブジェクトに解析
- `parse_value_from_json(json_str: &str) -> Result`: JSON文字列をValueオブジェクトに解析
### フォーマッター関数
- `format_value(value: &Value) -> String`: Valueオブジェクトを文字列にフォーマット
- `format_signal(signal: &Signal) -> String`: Signalオブジェクトを文字列にフォーマット
## エラーハンドリング
ライブラリは統一されたエラー型`ClientError`を提供します:
```rust
use vehicle_shadow_client::{ClientError, Result};
match client.get_signals(paths).await {
Ok(response) => {
// 成功時の処理
}
Err(ClientError::Transport(e)) => {
// トランスポートエラー
}
Err(ClientError::JsonParse(e)) => {
// JSON解析エラー
}
Err(ClientError::Service(e)) => {
// サービスエラー
}
// その他のエラー...
}
```
## 依存関係
```toml
[dependencies]
vehicle-shadow-client = "0.1.0"
tokio = { version = "1.0", features = ["full"] }
```
## ライセンス
MITライセンスの下で公開されています。