use crate::flow_definition::{
map_upload_results, rewrite_source_paths, upload_requests, validate_document,
};
use crate::sdk_error::FlowTargetRequirement;
use crate::{Client, FlowDefinitionDocument, FlowDefinitionUploadResult, SdkError, SdkResult};
const UPLOAD_FLOW_DEFINITIONS: &str = "upload_flow_definitions";
impl Client {
pub fn upload_flow_definitions(
&self,
documents: impl IntoIterator<Item = FlowDefinitionDocument>,
force: bool,
) -> SdkResult<Vec<FlowDefinitionUploadResult>> {
let documents = documents.into_iter().collect::<Vec<_>>();
if documents.is_empty() {
return Ok(Vec::new());
}
for document in &documents {
validate_document(document).map_err(|message| SdkError::InvalidArgument { message })?;
}
let working_directory = crate::flow_definition::current_working_directory();
let prepared = rewrite_source_paths(documents, working_directory.as_deref())?;
self.require_server_protocol(UPLOAD_FLOW_DEFINITIONS)?;
let mut results = Vec::new();
for request in upload_requests(prepared, force) {
let mut service = self.service.clone();
let response = self
.runtime
.block_on(service.upload_flow_definitions(request))
.map_err(|status| {
SdkError::from_status(
status,
UPLOAD_FLOW_DEFINITIONS,
None,
FlowTargetRequirement::None,
)
})?;
results.extend(map_upload_results(response.into_inner()));
}
Ok(results)
}
}