use blockless_sdk::rpc::RpcClient;
use serde::{Deserialize, Serialize};
fn main() -> Result<(), Box<dyn std::error::Error>> {
let mut client = RpcClient::new();
println!("=== Example 1: Simple Ping ===");
match client.ping() {
Ok(response) => println!("Ping response: {}", response),
Err(e) => println!("Ping error: {}", e),
}
println!("\n=== Example 2: Echo Examples ===");
match client.echo("Hello, World!".to_string()) {
Ok(response) => println!("Echo string: {}", response),
Err(e) => println!("Echo error: {}", e),
}
match client.echo(42) {
Ok(response) => println!("Echo number: {}", response),
Err(e) => println!("Echo error: {}", e),
}
#[derive(Serialize, Deserialize, Debug)]
struct Person {
name: String,
age: u32,
}
let person = Person {
name: "Alice".to_string(),
age: 30,
};
match client.echo(person) {
Ok(response) => println!("Echo person: {:?}", response),
Err(e) => println!("Echo error: {}", e),
}
println!("\n=== Example 3: Get Version ===");
match client.version() {
Ok(version) => {
println!("Version info:");
for (key, value) in version {
println!(" {}: {}", key, value);
}
}
Err(e) => println!("Version error: {}", e),
}
println!("\n=== Example 4: Generic Call ===");
#[derive(Serialize, Deserialize, Debug)]
struct CustomRequest {
message: String,
count: u32,
}
#[derive(Serialize, Deserialize, Debug)]
struct CustomResponse {
processed: String,
timestamp: u64,
}
let request = CustomRequest {
message: "Test message".to_string(),
count: 5,
};
match client.call::<CustomRequest, CustomResponse>("custom.process", Some(request)) {
Ok(response) => {
if let Some(result) = response.result {
println!("Custom response: {:?}", result);
} else if let Some(error) = response.error {
println!("Custom error: {} (code: {})", error.message, error.code);
}
}
Err(e) => println!("Custom call error: {}", e),
}
println!("\n=== Example 5: Error Handling ===");
match client.call::<(), String>("nonexistent.method", None) {
Ok(response) => {
if let Some(error) = response.error {
println!("Expected error: {} (code: {})", error.message, error.code);
}
}
Err(e) => println!("Call error: {}", e),
}
println!("\nAll examples completed!");
Ok(())
}