Struct graph_http::api_impl::UploadSession
source · pub struct UploadSession { /* private fields */ }
Implementations§
source§impl UploadSession
impl UploadSession
pub fn empty(url: Url) -> UploadSession
pub fn url(&self) -> &Url
pub fn status(&self) -> RequestBuilder
pub fn cancel(&self) -> RequestBuilder
pub fn from_reader<U: AsRef<str>, R: Read>( upload_url: U, reader: R ) -> GraphResult<UploadSession>
sourcepub fn stream(
&mut self
) -> GraphResult<impl Stream<Item = GraphResult<Response>> + '_>
pub fn stream( &mut self ) -> GraphResult<impl Stream<Item = GraphResult<Response>> + '_>
Stream upload session responses.
Each stream.next().await returns a Option<GraphResult<reqwest::Response>>
.
No pinning is required. The stream is pinned before being returned to the caller.
Example
ⓘ
use graph_rs_sdk::*;
use futures::stream::StreamExt;
use std::fs::OpenOptions;
static ACCESS_TOKEN: &str = "ACCESS_TOKEN";
// Path to upload file to in OneDrive.
static ONEDRIVE_PATH: &str = ":/file.txt:";
static LOCAL_FILE_PATH: &str = "./file.txt";
let client = Graph::new("ACCESS_TOKEN");
let response = client
.me()
.drive()
.item_by_path(ONEDRIVE_PATH)
.create_upload_session(&serde_json::json!({
"@microsoft.graph.conflictBehavior": Some("fail".to_string())
}))
.send()
.await?;
assert!(response.status().is_success());
let mut file = OpenOptions::new()
.read(true)
.open(LOCAL_FILE_PATH)?;
let mut upload_session = response.into_upload_session(file).await?;
let mut stream = upload_session.stream()?;
while let Some(result) = stream.next().await {
match result {
Ok(response) => {
println!("{response:#?}");
let body: serde_json::Value = response.json().await?;
println!("{body:#?}");
}
Err(err) => panic!("Error on upload session {err:#?}")
}
}