floe-core 0.3.6

Core library for Floe, a YAML-driven technical ingestion tool.
Documentation
use crate::errors::RunError;
use crate::{config, io, FloeResult};

use crate::io::storage::{paths, CloudClient, Target};

pub fn archive_input_file(
    cloud: &mut CloudClient,
    resolver: &config::StorageResolver,
    run_id: &str,
    entity: &config::EntityConfig,
    archive_target: Option<&Target>,
    input_file: &io::format::InputFile,
) -> FloeResult<Option<String>> {
    let target = match archive_target {
        Some(target) => target,
        None => return Ok(None),
    };
    let relative = paths::archive_relative_path_for_run(
        &entity.name,
        input_file.source_name.as_str(),
        run_id,
        &input_file.source_uri,
    );
    let dest_uri = target.join_relative(&relative);
    let client = cloud.client_for(resolver, target.storage(), entity)?;
    client.copy_object(&input_file.source_uri, &dest_uri)?;
    if let Err(err) = client.delete_object(&input_file.source_uri) {
        return Err(Box::new(RunError(format!(
            "entity.name={} archive delete failed for {}: {err}",
            entity.name, input_file.source_uri
        ))));
    }
    Ok(Some(dest_uri))
}