diff --git a/README.md b/README.md
index bbde19b..0eae427 100644
--- a/README.md
+++ b/README.md
@@ -1,10 +1,8 @@
Argon2-Creds
- Argon2-Creds provides a convenient abstractions for managing
- credentials
+ Argon2-Creds - convenient abstractions for managing credentials
-
[![Documentation](https://img.shields.io/badge/docs-master-blue)](https://realaravinth.github.io/argon2-creds/argon2_creds/index.html)
![CI (Linux)]()
@@ -22,3 +20,72 @@
[Blacklist](https://github.com/shuttlecraft/The-Big-Username-Blacklist)
- [x] Profanity filter
- [x] Email validation(Regex validation not verification)
+
+## Usage:
+
+Add this to your `Cargo.toml`:
+
+```toml
+argon2-creds = { version = "0.1", git = "https://github.com/realaravinth/argon2-creds" }
+```
+
+## Examples:
+
+1. The easiest way to use this crate is with the default configuration. See `Default`
+ implementation for the default configuration.
+
+ ```rust
+ use argon2_creds::Config;
+
+ fn main() {
+ let config = Config::default();
+
+ let password = "ironmansucks";
+ let hash = config.password(password).unwrap();
+
+ // email validation
+ config.email(Some("batman@we.net")).unwrap();
+
+ // process username
+ let username = config.username("Realaravinth").unwrap(); // process username
+
+ // generate hash
+ let hash = config.password(password).unwrap();
+
+ assert_eq!(username, "realaravinth");
+ assert!(Config::verify(&hash, password).unwrap(), "verify hahsing");
+ }
+ ```
+
+2. To gain fine-grained control over how credentials are managed, consider using
+ [ConfigBuilder]:
+
+```rust
+ use argon2_creds::{ConfigBuilder, Config};
+
+ fn main() {
+ let config = ConfigBuilder::default()
+ .salt_length(32)
+ .username_case_mapped(false)
+ .profanity(true)
+ .blacklist(false)
+ .argon2(argon2::Config::default())
+ .build()
+ .unwrap();
+
+ let password = "ironmansucks";
+ let hash = config.password(password).unwrap();
+
+ // email validation
+ config.email(Some("batman@we.net")).unwrap();
+
+ // process username
+ let username = config.username("Realaravinth").unwrap(); // process username
+
+ // generate hash
+ let hash = config.password(password).unwrap();
+
+ assert_eq!(username, "realaravinth");
+ assert!(Config::verify(&hash, password).unwrap(), "verify hahsing");
+ }
+```
diff --git a/examples/complex.rs b/examples/complex.rs
new file mode 100644
index 0000000..be56bc0
--- /dev/null
+++ b/examples/complex.rs
@@ -0,0 +1,29 @@
+//To gain fine-grained control over how credentials are managed, consider using ConfigBuilder:
+
+use argon2_creds::{Config, ConfigBuilder};
+
+fn main() {
+ let config = ConfigBuilder::default()
+ .salt_length(32)
+ .username_case_mapped(false)
+ .profanity(true)
+ .blacklist(false)
+ .argon2(argon2::Config::default())
+ .build()
+ .unwrap();
+
+ let password = "ironmansucks";
+ let hash = config.password(password).unwrap();
+
+ // email validation
+ config.email(Some("batman@we.net")).unwrap();
+
+ // process username
+ let username = config.username("Realaravinth").unwrap(); // process username
+
+ // generate hash
+ let hash = config.password(password).unwrap();
+
+ assert_eq!(username, "realaravinth");
+ assert!(Config::verify(&hash, password).unwrap(), "verify hahsing");
+}
diff --git a/examples/simple.rs b/examples/simple.rs
new file mode 100644
index 0000000..44d049d
--- /dev/null
+++ b/examples/simple.rs
@@ -0,0 +1,22 @@
+// The easiest way to use this crate is with the default configuration. See `Default`
+// implementation for the default configuration.
+
+use argon2_creds::Config;
+
+fn main() {
+ let config = Config::default();
+
+ let password = "ironmansucks";
+
+ // email validation
+ config.email(Some("batman@we.net")).unwrap();
+
+ // process username
+ let username = config.username("Realaravinth").unwrap(); // process username
+
+ // generate hash
+ let hash = config.password(password).unwrap();
+
+ assert_eq!(username, "realaravinth");
+ assert!(Config::verify(&hash, password).unwrap(), "verify hahsing");
+}