diff --git a/rustfmt.toml b/rustfmt.toml
index 75306517965a54731b94dca8bace640e856af115..679c7ab81f9e71f08747a5968ba418010179fb52 100644
--- a/rustfmt.toml
+++ b/rustfmt.toml
@@ -1 +1,2 @@
+version = "Two"
 max_width = 120
diff --git a/src/api/admin.rs b/src/api/admin.rs
index 2b7c7dfd081cd522d569754ec53aec4739490341..83e0066d69778ee7b28908309c4f575a82d56ef7 100644
--- a/src/api/admin.rs
+++ b/src/api/admin.rs
@@ -110,7 +110,7 @@ struct AdminTemplateData {
     users: Vec<Value>,
     config: Value,
     can_backup: bool,
-    logged_in: bool
+    logged_in: bool,
 }
 
 impl AdminTemplateData {
@@ -121,7 +121,7 @@ impl AdminTemplateData {
             users,
             config: CONFIG.prepare_json(),
             can_backup: *CAN_BACKUP,
-            logged_in: true
+            logged_in: true,
         }
     }
 
diff --git a/src/api/core/mod.rs b/src/api/core/mod.rs
index c8de156f1a386cefb7d8a427ed19ba65a4f3f183..55ed66dc2d8cdadd8bcd4a8b8faf78cdf60b330f 100644
--- a/src/api/core/mod.rs
+++ b/src/api/core/mod.rs
@@ -149,11 +149,10 @@ fn hibp_breach(username: String) -> JsonResult {
     use reqwest::{header::USER_AGENT, Client};
 
     if let Some(api_key) = crate::CONFIG.hibp_api_key() {
-        let hibp_client = Client::builder()
-            .use_sys_proxy()
-            .build()?;
+        let hibp_client = Client::builder().use_sys_proxy().build()?;
 
-        let res = hibp_client.get(&url)
+        let res = hibp_client
+            .get(&url)
             .header(USER_AGENT, user_agent)
             .header("hibp-api-key", api_key)
             .send()?;
diff --git a/src/api/core/two_factor/duo.rs b/src/api/core/two_factor/duo.rs
index 1d8074d52538ae1454888839bcfe3d4fc4312f02..502c8bdb121498438ce701313b565d43dea3b763 100644
--- a/src/api/core/two_factor/duo.rs
+++ b/src/api/core/two_factor/duo.rs
@@ -16,11 +16,7 @@ use crate::error::MapResult;
 use crate::CONFIG;
 
 pub fn routes() -> Vec<Route> {
-    routes![
-        get_duo,
-        activate_duo,
-        activate_duo_put,
-    ]
+    routes![get_duo, activate_duo, activate_duo_put,]
 }
 
 #[derive(Serialize, Deserialize)]
@@ -171,7 +167,7 @@ fn activate_duo(data: JsonUpcase<EnableDuoData>, headers: Headers, conn: DbConn)
     let type_ = TwoFactorType::Duo;
     let twofactor = TwoFactor::new(user.uuid.clone(), type_, data_str);
     twofactor.save(&conn)?;
-    
+
     _generate_recover_code(&mut user, &conn);
 
     Ok(Json(json!({
diff --git a/src/api/core/two_factor/email.rs b/src/api/core/two_factor/email.rs
index 5b1565d44e829ab1798fda73fbb4fa19f5ea9749..5cf00e30414c1a3eb8b61f06729ab70ead5749e3 100644
--- a/src/api/core/two_factor/email.rs
+++ b/src/api/core/two_factor/email.rs
@@ -18,12 +18,7 @@ use chrono::{Duration, NaiveDateTime, Utc};
 use std::ops::Add;
 
 pub fn routes() -> Vec<Route> {
-    routes![
-        get_email,
-        send_email_login,
-        send_email,
-        email,
-    ]
+    routes![get_email, send_email_login, send_email, email,]
 }
 
 #[derive(Deserialize)]
diff --git a/src/api/core/two_factor/yubikey.rs b/src/api/core/two_factor/yubikey.rs
index 02b0244bc52186e012d8528a2b469b2b23c79462..552c238f12e45e4bb4e8707c526c56ef03cd74b0 100644
--- a/src/api/core/two_factor/yubikey.rs
+++ b/src/api/core/two_factor/yubikey.rs
@@ -16,11 +16,7 @@ use crate::error::{Error, MapResult};
 use crate::CONFIG;
 
 pub fn routes() -> Vec<Route> {
-    routes![
-        generate_yubikey,
-        activate_yubikey,
-        activate_yubikey_put,
-    ]
+    routes![generate_yubikey, activate_yubikey, activate_yubikey_put,]
 }
 
 #[derive(Deserialize, Debug)]
diff --git a/src/api/icons.rs b/src/api/icons.rs
index ab692132599afd72a61024ba7c338794112d922a..6dd0619dbe77793f0ac346441d8cd558b954f9c9 100644
--- a/src/api/icons.rs
+++ b/src/api/icons.rs
@@ -391,7 +391,7 @@ fn download_icon(domain: &str) -> Result<Vec<u8>, Error> {
                         break;
                     }
                 }
-                _ => warn!("data uri is invalid")
+                _ => warn!("data uri is invalid"),
             };
         } else {
             match get_page_with_cookies(&icon.href, &cookie_str) {
diff --git a/src/api/web.rs b/src/api/web.rs
index 72c89b5baf7986437a91d549a8abd7561c10475d..408e38ee0461f07691d681d7f2cf1f1cbb5b14b4 100644
--- a/src/api/web.rs
+++ b/src/api/web.rs
@@ -7,12 +7,12 @@ use rocket::Route;
 use rocket_contrib::json::Json;
 use serde_json::Value;
 
-use crate::util::Cached;
 use crate::error::Error;
+use crate::util::Cached;
 use crate::CONFIG;
 
 pub fn routes() -> Vec<Route> {
-    // If addding more routes here, consider also adding them to 
+    // If addding more routes here, consider also adding them to
     // crate::utils::LOGGED_ROUTES to make sure they appear in the log
     if CONFIG.web_vault_enabled() {
         routes![web_index, app_id, web_files, attachments, alive, static_files]
@@ -23,9 +23,7 @@ pub fn routes() -> Vec<Route> {
 
 #[get("/")]
 fn web_index() -> Cached<Option<NamedFile>> {
-    Cached::short(NamedFile::open(
-        Path::new(&CONFIG.web_vault_folder()).join("index.html"),
-    ).ok())
+    Cached::short(NamedFile::open(Path::new(&CONFIG.web_vault_folder()).join("index.html")).ok())
 }
 
 #[get("/app-id.json")]
@@ -79,4 +77,4 @@ fn static_files(filename: String) -> Result<Content<&'static [u8]>, Error> {
         "identicon.js" => Ok(Content(ContentType::JavaScript, include_bytes!("../static/scripts/identicon.js"))),
         _ => err!("Image not found"),
     }
-}
\ No newline at end of file
+}
diff --git a/src/auth.rs b/src/auth.rs
index cd19e97b5a36643cb002b8f45eee75d0198bca78..a0f3f15edff60c2450bc1c732524b2846ab1990a 100644
--- a/src/auth.rs
+++ b/src/auth.rs
@@ -156,9 +156,7 @@ pub struct DeleteJWTClaims {
     pub sub: String,
 }
 
-pub fn generate_delete_claims(
-    uuid: String,
-) -> DeleteJWTClaims {
+pub fn generate_delete_claims(uuid: String) -> DeleteJWTClaims {
     let time_now = Utc::now().naive_utc();
     DeleteJWTClaims {
         nbf: time_now.timestamp(),
@@ -180,9 +178,7 @@ pub struct VerifyEmailJWTClaims {
     pub sub: String,
 }
 
-pub fn generate_verify_email_claims(
-    uuid: String,
-) -> DeleteJWTClaims {
+pub fn generate_verify_email_claims(uuid: String) -> DeleteJWTClaims {
     let time_now = Utc::now().naive_utc();
     DeleteJWTClaims {
         nbf: time_now.timestamp(),
diff --git a/src/config.rs b/src/config.rs
index 88869f71513ae676a87bfe89a48319a4a6bbaa24..296f2a3ad555ea638332da6a4acde5e890bd1260 100644
--- a/src/config.rs
+++ b/src/config.rs
@@ -378,7 +378,6 @@ make_config! {
 
 fn validate_config(cfg: &ConfigItems) -> Result<(), Error> {
     let db_url = cfg.database_url.to_lowercase();
-    
     if cfg!(feature = "sqlite") && (db_url.starts_with("mysql:") || db_url.starts_with("postgresql:")) {
         err!("`DATABASE_URL` is meant for MySQL or Postgres, while this server is meant for SQLite")
     }
@@ -447,12 +446,7 @@ impl Config {
         validate_config(&config)?;
 
         Ok(Config {
-            inner: RwLock::new(Inner {
-                templates: load_templates(&config.templates_folder),
-                config,
-                _env,
-                _usr,
-            }),
+            inner: RwLock::new(Inner { templates: load_templates(&config.templates_folder), config, _env, _usr }),
         })
     }
 
@@ -500,9 +494,8 @@ impl Config {
         let e: Vec<&str> = email.rsplitn(2, '@').collect();
         if e.len() != 2 || e[0].is_empty() || e[1].is_empty() {
             warn!("Failed to parse email address '{}'", email);
-            return false
+            return false;
         }
-        
         self.signups_domains_whitelist().split(',').any(|d| d == e[0])
     }
 
@@ -634,9 +627,7 @@ impl HelperDef for CaseHelper {
         rc: &mut RenderContext<'reg>,
         out: &mut dyn Output,
     ) -> HelperResult {
-        let param = h
-            .param(0)
-            .ok_or_else(|| RenderError::new("Param not found for helper \"case\""))?;
+        let param = h.param(0).ok_or_else(|| RenderError::new("Param not found for helper \"case\""))?;
         let value = param.value().clone();
 
         if h.params().iter().skip(1).any(|x| x.value() == &value) {
@@ -658,14 +649,10 @@ impl HelperDef for JsEscapeHelper {
         _: &mut RenderContext<'reg>,
         out: &mut dyn Output,
     ) -> HelperResult {
-        let param = h
-            .param(0)
-            .ok_or_else(|| RenderError::new("Param not found for helper \"js_escape\""))?;
-
-        let value = param
-            .value()
-            .as_str()
-            .ok_or_else(|| RenderError::new("Param for helper \"js_escape\" is not a String"))?;
+        let param = h.param(0).ok_or_else(|| RenderError::new("Param not found for helper \"js_escape\""))?;
+
+        let value =
+            param.value().as_str().ok_or_else(|| RenderError::new("Param for helper \"js_escape\" is not a String"))?;
 
         let escaped_value = value.replace('\\', "").replace('\'', "\\x22").replace('\"', "\\x27");
         let quoted_value = format!("&quot;{}&quot;", escaped_value);
diff --git a/src/crypto.rs b/src/crypto.rs
index dd3ed31a822504ee22818cbaeb32c81fded6f7ff..248bd61f3356912e53f4e59fa75927b5fda9dbbd 100644
--- a/src/crypto.rs
+++ b/src/crypto.rs
@@ -2,9 +2,9 @@
 // PBKDF2 derivation
 //
 
+use crate::error::Error;
 use ring::{digest, hmac, pbkdf2};
 use std::num::NonZeroU32;
-use crate::error::Error;
 
 static DIGEST_ALG: &digest::Algorithm = &digest::SHA256;
 const OUTPUT_LEN: usize = digest::SHA256_OUTPUT_LEN;
diff --git a/src/error.rs b/src/error.rs
index 32d247d0264ecb1e7bcc1b070dc3dcaa743d8d7d..74a787bb0be08fbcdeed0359e5178ae3c402a317 100644
--- a/src/error.rs
+++ b/src/error.rs
@@ -94,7 +94,7 @@ impl std::fmt::Debug for Error {
                     } else {
                         write!(f, "{}. {}", self.message, s)
                     }
-                },
+                }
                 ErrorKind::JsonError(_) => write!(f, "{}", self.message),
                 _ => unreachable!(),
             },
diff --git a/src/mail.rs b/src/mail.rs
index 711ac5bb4a5663dca53de5af01e0ad74f8cd7ef7..4b6272a74b9ddc13bd53f9a4143dd6305c3321ac 100644
--- a/src/mail.rs
+++ b/src/mail.rs
@@ -8,7 +8,7 @@ use percent_encoding::{percent_encode, NON_ALPHANUMERIC};
 use quoted_printable::encode_to_str;
 
 use crate::api::EmptyResult;
-use crate::auth::{encode_jwt, generate_invite_claims, generate_delete_claims, generate_verify_email_claims};
+use crate::auth::{encode_jwt, generate_delete_claims, generate_invite_claims, generate_verify_email_claims};
 use crate::error::Error;
 use crate::CONFIG;
 use chrono::NaiveDateTime;
@@ -96,9 +96,7 @@ pub fn send_password_hint(address: &str, hint: Option<String>) -> EmptyResult {
 }
 
 pub fn send_delete_account(address: &str, uuid: &str) -> EmptyResult {
-    let claims = generate_delete_claims(
-        uuid.to_string(),
-    );
+    let claims = generate_delete_claims(uuid.to_string());
     let delete_token = encode_jwt(&claims);
 
     let (subject, body_html, body_text) = get_text(
@@ -115,9 +113,7 @@ pub fn send_delete_account(address: &str, uuid: &str) -> EmptyResult {
 }
 
 pub fn send_verify_email(address: &str, uuid: &str) -> EmptyResult {
-    let claims = generate_verify_email_claims(
-        uuid.to_string(),
-    );
+    let claims = generate_verify_email_claims(uuid.to_string());
     let verify_email_token = encode_jwt(&claims);
 
     let (subject, body_html, body_text) = get_text(
@@ -145,9 +141,7 @@ pub fn send_welcome(address: &str) -> EmptyResult {
 }
 
 pub fn send_welcome_must_verify(address: &str, uuid: &str) -> EmptyResult {
-    let claims = generate_verify_email_claims(
-        uuid.to_string(),
-    );
+    let claims = generate_verify_email_claims(uuid.to_string());
     let verify_email_token = encode_jwt(&claims);
 
     let (subject, body_html, body_text) = get_text(