summary refs log tree commit diff
path: root/libsecret/src/retrievable.rs
diff options
context:
space:
mode:
authorVika <vika@fireburn.ru>2024-10-22 21:52:10 +0300
committerVika <vika@fireburn.ru>2024-10-22 21:52:10 +0300
commitf2f7b6ffec7bf657966353c850d25c6ab218ff7c (patch)
treed4d5cc76474453863a064eb04d75af5353579f5b /libsecret/src/retrievable.rs
parent3bd499a9d696a850a493bf81c01c68aee18c9d7b (diff)
downloadbowl-f2f7b6ffec7bf657966353c850d25c6ab218ff7c.tar.zst
vendor libsecret
The libsecret-rs crate is unmaintained, so I'm vendoring it for
now. Bumping the glib version turned out to be enough.

The exact process I used was:
1. Cloning the repository
2. Making changes
3. `cargo build` to ensure it works
4. `cargo package --no-verify` (b/c it tries to build all crates
separately instead of the entire workspace as a whole)
5. `mkdir libsecret/sys -p`
6. `tar --strip-components 1 -C libsecret -xvf ../libsecret-rs/target/package/libsecret-0.6.0.crate`
7. `tar --strip-components 1 -C libsecret/sys -xvf ../libsecret-rs/target/package/libsecret-sys-0.6.0.crate`

Then `Cargo.toml` is modified to ensure the libsecret and its `-sys`
crate build out of my vendored sources.

In the future, if I gain maintainership of the `libsecret` crate, I
could just revert this commit to make it point back to the upstream.
Diffstat (limited to 'libsecret/src/retrievable.rs')
-rw-r--r--libsecret/src/retrievable.rs20
1 files changed, 20 insertions, 0 deletions
diff --git a/libsecret/src/retrievable.rs b/libsecret/src/retrievable.rs
new file mode 100644
index 0000000..617d8e3
--- /dev/null
+++ b/libsecret/src/retrievable.rs
@@ -0,0 +1,20 @@
+use std::collections::HashMap;
+
+use crate::Retrievable;
+use glib::object::IsA;
+use glib::translate::*;
+
+pub trait RetrievableExtManual: 'static {
+    #[doc(alias = "secret_retrievable_get_attributes")]
+    #[doc(alias = "get_attributes")]
+    fn attributes(&self) -> HashMap<String, String>;
+}
+
+impl<O: IsA<Retrievable>> RetrievableExtManual for O {
+    fn attributes(&self) -> HashMap<String, String> {
+        unsafe {
+            let table = ffi::secret_retrievable_get_attributes(self.as_ref().to_glib_none().0);
+            FromGlibPtrContainer::from_glib_full(table)
+        }
+    }
+}