quilt-rs 0.6.0

Rust library for accessing Quilt data packages.
Documentation
use std::collections::BTreeMap;

use super::{CommitState, LineagePaths, PackageLineage};
use crate::quilt::lineage::PathState;
use crate::quilt::manifest_handle::RemoteManifest;
use crate::quilt::uri::S3PackageUri;
use crate::quilt::Error;

pub fn path_state() -> PathState {
    PathState {
        timestamp: chrono::DateTime::default(),
        hash: multihash::Multihash::wrap(0xb510, b"pedestrian").unwrap(),
    }
}

fn commit_state_with_hash(hash: &str) -> Option<CommitState> {
    Some(CommitState {
        hash: hash.to_string(),
        ..CommitState::default()
    })
}

fn lineage_paths(keys: &Vec<&str>) -> LineagePaths {
    let mut paths = BTreeMap::new();
    for key in keys {
        paths.insert(key.to_string(), path_state());
    }
    paths
}

pub fn with_paths(keys: &Vec<&str>) -> PackageLineage {
    PackageLineage {
        paths: lineage_paths(keys),
        ..PackageLineage::default()
    }
}

pub fn with_commit() -> PackageLineage {
    PackageLineage {
        commit: Some(CommitState::default()),
        ..PackageLineage::default()
    }
}

pub fn with_remote(uri_str: &str) -> Result<PackageLineage, Error> {
    let uri = S3PackageUri::try_from(uri_str)?;
    let remote_manifest: RemoteManifest = uri.into();
    Ok(PackageLineage {
        remote: remote_manifest,
        ..PackageLineage::default()
    })
}

pub fn with_commit_hash(hash: &str) -> PackageLineage {
    PackageLineage {
        commit: commit_state_with_hash(hash),
        ..PackageLineage::default()
    }
}

pub fn with_commit_hashes(base_hash: &str, latest_hash: &str, commit_hash: &str) -> PackageLineage {
    PackageLineage {
        commit: commit_state_with_hash(commit_hash),
        base_hash: base_hash.to_string(),
        latest_hash: latest_hash.to_string(),
        ..PackageLineage::default()
    }
}