summary refs log tree commit diff
path: root/libsecret/src/lib.rs
diff options
context:
space:
mode:
Diffstat (limited to 'libsecret/src/lib.rs')
-rw-r--r--libsecret/src/lib.rs123
1 files changed, 123 insertions, 0 deletions
diff --git a/libsecret/src/lib.rs b/libsecret/src/lib.rs
new file mode 100644
index 0000000..8d4c306
--- /dev/null
+++ b/libsecret/src/lib.rs
@@ -0,0 +1,123 @@
+#![cfg_attr(feature = "dox", feature(doc_cfg))]
+//! # Rust Libsecret bindings
+//!
+//! This library contains safe Rust bindings for
+//! [Libsecret](https://gitlab.gnome.org/GNOME/libsecret/), a library that
+//! offers access to the Secret Service API.
+//!
+//! See also
+//!
+//! - [gtk-rs project overview](https://gtk-rs.org/)
+//!
+//! ## Usage
+//!
+//! You can add libsecret by adding it in your `Cargo.toml` file:
+//!
+//! ```toml
+//! [dependencies.secret]
+//! package = "libsecret"
+//! version = "0.x.y"
+//! ```
+//!
+//! ### Define a password schema
+//!
+//! Each stored password has a set of attributes which are later used to lookup
+//! the password. The names and types of the attributes are defined in a schema.
+//! The schema is usually defined once globally. Here’s how to define a schema:
+//!
+//! ```no_run
+//! let mut attributes = std::collections::HashMap::new();
+//! attributes.insert("number", libsecret::SchemaAttributeType::Integer);
+//! attributes.insert("string", libsecret::SchemaAttributeType::String);
+//! attributes.insert("even", libsecret::SchemaAttributeType::Boolean);
+//!
+//! let schema = libsecret::Schema::new("some.app.Id", libsecret::SchemaFlags::NONE, attributes);
+//! ```
+//!
+//! ### Store a password
+//!
+//! Each stored password has a set of attributes which are later used to lookup
+//! the password. The attributes should not contain secrets, as they are not
+//! stored in an encrypted fashion.
+//!
+//! This first example stores a password asynchronously, and is appropriate for GUI applications so that the UI does not block.
+//!
+//! ```no_run
+//! let mut attributes = std::collections::HashMap::new();
+//! attributes.insert("number", "8");
+//! attributes.insert("string", "eight");
+//! attributes.insert("even", "true");
+//!
+//! let collection = libsecret::COLLECTION_DEFAULT;
+//! libsecret::password_store_future(Some(&schema), attributes, Some(&collection), "The Label", "the password").await?;
+//! ```
+//!
+//! ### Lookup a password
+//!
+//! Each stored password has a set of attributes which are used to lookup the
+//! password. If multiple passwords match the lookup attributes, then the one
+//! stored most recently is returned.
+//!
+//! This first example looks up a password asynchronously, and is appropriate
+//! for GUI applications so that the UI does not block.
+//!
+//! ```no_run
+//! let mut attributes = std::collections::HashMap::new();
+//! attributes.insert("number", "8");
+//! attributes.insert("even", "true");
+//!
+//! let password = libsecret::password_lookup_future(Some(&schema), attributes).await?;
+//! ```
+//! ### Remove a password
+//!
+//! Each stored password has a set of attributes which are used to find which
+//! password to remove. If multiple passwords match the attributes, then the one
+//! stored most recently is removed.
+//!
+//! This first example removes a password asynchronously, and is appropriate for
+//! GUI applications so that the UI does not block.
+//!
+//! ```no_run
+//! let mut attributes = std::collections::HashMap::new();
+//! attributes.insert("number", "8");
+//! attributes.insert("even", "true");
+//!
+//! libsecret::password_clear_future(Some(&schema), attributes).await?;
+//! ```
+#[allow(unused_imports)]
+mod auto;
+
+pub use auto::functions::*;
+pub use auto::*;
+pub use functions::*;
+
+mod collection;
+mod enums;
+mod functions;
+mod hashtable;
+#[allow(clippy::too_many_arguments)]
+mod item;
+mod prompt;
+#[cfg(any(feature = "v0_19", feature = "dox"))]
+#[cfg_attr(feature = "dox", doc(cfg(feature = "v0_19")))]
+mod retrievable;
+mod schema;
+mod schema_attribute;
+#[allow(clippy::type_complexity)]
+#[allow(clippy::too_many_arguments)]
+mod service;
+mod value;
+
+pub use value::Value;
+
+pub use ffi;
+
+pub mod prelude {
+    pub use super::auto::traits::*;
+    pub use super::collection::CollectionExtManual;
+    pub use super::prompt::PromptExtManual;
+    #[cfg(any(feature = "v0_19", feature = "dox"))]
+    #[cfg_attr(feature = "dox", doc(cfg(feature = "v0_19")))]
+    pub use super::retrievable::RetrievableExtManual;
+    pub use super::service::ServiceExtManual;
+}