quilt-rs 0.7.0

Rust library for accessing Quilt data packages.
Documentation
pub use crate::quilt::lineage::mocks as lineage;

pub mod status {
    use multihash::Multihash;

    use crate::quilt::flow::status::PackageFileFingerprint;

    pub fn package_file_fingerprint() -> PackageFileFingerprint {
        PackageFileFingerprint {
            size: 0,
            hash: Multihash::wrap(0xb510, b"pedestrian").unwrap(),
        }
    }
}

pub mod manifest {
    use std::collections::BTreeMap;

    use multihash::Multihash;

    use crate::quilt::manifest_handle::ReadableManifest;
    use crate::quilt::storage::Storage;
    use crate::Error;
    use crate::Row4;
    use crate::Table;

    pub fn row4_with_name(name: String) -> Row4 {
        Row4 {
            name,
            place: "file:///z/x/y".to_string(),
            hash: Multihash::wrap(0xb510, b"pedestrian").unwrap(),
            ..Row4::default()
        }
    }

    pub fn default() -> impl ReadableManifest {
        struct InMemoryManifest {}
        impl ReadableManifest for InMemoryManifest {
            async fn read(&self, _storage: &impl Storage) -> Result<Table, Error> {
                Ok(Table::default())
            }
        }
        InMemoryManifest {}
    }

    pub fn with_record_keys(keys: Vec<String>) -> impl ReadableManifest {
        struct InMemoryManifest {
            keys: Vec<String>,
        }
        impl ReadableManifest for InMemoryManifest {
            async fn read(&self, _storage: &impl Storage) -> Result<Table, Error> {
                let mut records = BTreeMap::new();
                for key in &self.keys {
                    records.insert(key.to_string(), row4_with_name(key.to_string()));
                }
                Ok(Table {
                    records,
                    ..Table::default()
                })
            }
        }
        InMemoryManifest { keys }
    }

    pub fn with_rows(rows: Vec<Row4>) -> impl ReadableManifest {
        struct InMemoryManifest {
            rows: Vec<Row4>,
        }
        impl ReadableManifest for InMemoryManifest {
            async fn read(&self, _storage: &impl Storage) -> Result<Table, Error> {
                let mut records = BTreeMap::new();
                for row in &self.rows {
                    records.insert(row.name.to_string(), row.clone());
                }
                Ok(Table {
                    records,
                    ..Table::default()
                })
            }
        }
        InMemoryManifest { rows }
    }
}