diff --git a/rust-bindings/rust/src/core.rs b/rust-bindings/rust/src/core.rs new file mode 100644 index 00000000..616e1123 --- /dev/null +++ b/rust-bindings/rust/src/core.rs @@ -0,0 +1,21 @@ +//! Hand written bindings for ostree-core.h + +use glib::VariantDict; + +/// The type of a commit object: `(a{sv}aya(say)sstayay)` +pub type CommitVariantType = ( + VariantDict, + Vec, + Vec<(String, Vec)>, + String, + String, + u64, + Vec, + Vec, +); + +/// The type of a dirtree object: `(a(say)a(sayay))` +pub type TreeVariantType = (Vec<(String, Vec)>, Vec<(String, Vec, Vec)>); + +/// The type of a directory metadata object: `(uuua(ayay))` +pub type DirmetaVariantType = (u32, u32, u32, Vec<(Vec, Vec)>); diff --git a/rust-bindings/rust/src/lib.rs b/rust-bindings/rust/src/lib.rs index 8b065dc7..9e7fa631 100644 --- a/rust-bindings/rust/src/lib.rs +++ b/rust-bindings/rust/src/lib.rs @@ -27,6 +27,9 @@ pub use crate::auto::*; // handwritten code mod checksum; pub use crate::checksum::*; +mod core; +pub use crate::core::*; + #[cfg(any(feature = "v2018_6", feature = "dox"))] mod collection_ref; #[cfg(any(feature = "v2018_6", feature = "dox"))] diff --git a/rust-bindings/rust/tests/core/mod.rs b/rust-bindings/rust/tests/core/mod.rs new file mode 100644 index 00000000..7ac13cf2 --- /dev/null +++ b/rust-bindings/rust/tests/core/mod.rs @@ -0,0 +1,13 @@ +use crate::util::*; +use std::error::Error; + +#[test] +fn variant_types() -> Result<(), Box> { + let tr = TestRepo::new(); + let commit_checksum = tr.test_commit("test"); + let repo = &tr.repo; + let commit_v = repo.load_variant(ostree::ObjectType::Commit, commit_checksum.as_str())?; + let commit = commit_v.get::().unwrap(); + assert_eq!(commit.3, "Test Commit"); + Ok(()) +} diff --git a/rust-bindings/rust/tests/tests.rs b/rust-bindings/rust/tests/tests.rs index 9510133c..18076002 100644 --- a/rust-bindings/rust/tests/tests.rs +++ b/rust-bindings/rust/tests/tests.rs @@ -1,3 +1,4 @@ +mod core; mod functions; mod repo; #[cfg(feature = "v2020_2")]