ipfrs-interface 0.1.0

HTTP, gRPC, GraphQL and Python interfaces for IPFRS distributed storage
Documentation
//! gRPC Client Example
//!
//! This example demonstrates how to use the IPFRS gRPC client.
//!
//! # Prerequisites
//!
//! Start the gRPC server first:
//! ```bash
//! cargo run --example grpc_server
//! ```
//!
//! Then run this client:
//! ```bash
//! cargo run --example grpc_client
//! ```

use ipfrs_interface::grpc::proto::block::{
    block_service_client::BlockServiceClient, GetBlockRequest, HasBlockRequest, PutBlockRequest,
};
use tonic::Request;

#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
    println!("Connecting to IPFRS gRPC Server...");

    // Connect to server
    let mut client = BlockServiceClient::connect("http://[::1]:50051").await?;
    println!("✓ Connected to server\n");

    // Example 1: Put a block
    println!("Example 1: Storing a block");
    let data = b"Hello, IPFRS gRPC!";
    let request = Request::new(PutBlockRequest {
        data: data.to_vec(),
        format: None, // Use default format
    });

    let response = client.put_block(request).await?;
    let put_response = response.into_inner();

    let cid = put_response.cid;
    println!("  ✓ Block stored with CID: {}", cid);
    println!("  Size: {} bytes\n", put_response.size);

    // Example 2: Check if block exists
    println!("Example 2: Checking if block exists");
    let request = Request::new(HasBlockRequest { cid: cid.clone() });
    let response = client.has_block(request).await?;
    let has_response = response.into_inner();

    println!("  ✓ Block exists: {}\n", has_response.exists);

    // Example 3: Retrieve the block
    println!("Example 3: Retrieving the block");
    let request = Request::new(GetBlockRequest { cid: cid.clone() });
    let response = client.get_block(request).await?;
    let get_response = response.into_inner();

    let retrieved_data = get_response.data;
    let retrieved_str = String::from_utf8_lossy(&retrieved_data);
    println!("  ✓ Retrieved data: {}", retrieved_str);
    println!("  CID: {}", get_response.cid);
    println!("  Size: {} bytes\n", get_response.size);

    // Verify data matches
    if retrieved_data == data {
        println!("✓ Success! Data matches original");
    } else {
        println!("✗ Error: Data mismatch");
    }

    Ok(())
}