AirLibrary/Client/AirClient/
DownloadStreamRpc.rs1use std::collections::HashMap;
13
14use tonic::Request;
15
16use crate::{
17 AirError,
18 Client::AirClient::{AirClient, DownloadStream},
19 Vine::Generated::air::DownloadStreamRequest,
20 dev_log,
21};
22
23impl AirClient {
24 pub async fn DownloadStream(
32 &self,
33
34 request_id:String,
35
36 url:String,
37
38 headers:HashMap<String, String>,
39 ) -> Result<DownloadStream::Struct, AirError> {
40 dev_log!("grpc", "[AirClient] Starting stream download from: {}", url);
41
42 let RequestPayload = DownloadStreamRequest { request_id, url, headers };
43
44 let Client = self
45 .Client()
46 .ok_or_else(|| AirError::Network("Air client not initialized".to_string()))?;
47
48 let mut ClientGuard = Client.lock().await;
49
50 match ClientGuard.download_stream(Request::new(RequestPayload)).await {
51 Ok(Response) => {
52 dev_log!("grpc", "[AirClient] Stream download initiated successfully");
53
54 Ok(DownloadStream::Struct::new(Response.into_inner()))
55 },
56
57 Err(Status) => {
58 dev_log!("grpc", "error: [AirClient] Download stream RPC error: {}", Status);
59
60 Err(AirError::Network(format!("Download stream RPC error: {}", Status)))
61 },
62 }
63 }
64}