feat: 增强SaaS后端功能与安全性

refactor: 重构数据库连接使用PostgreSQL替代SQLite
feat(auth): 增加JWT验证的audience和issuer检查
feat(crypto): 添加AES-256-GCM字段加密支持
feat(api): 集成utoipa实现OpenAPI文档
fix(admin): 修复配置项表单验证逻辑
style: 统一代码格式与类型定义
docs: 更新技术栈文档说明PostgreSQL
This commit is contained in:
iven
2026-03-31 00:12:53 +08:00
parent 4d8d560d1f
commit 44256a511c
177 changed files with 9731 additions and 948 deletions

View File

@@ -0,0 +1,9 @@
(function() {
var implementors = Object.fromEntries([["totp_rs",[["impl <a class=\"trait\" href=\"https://doc.rust-lang.org/1.93.1/core/clone/trait.Clone.html\" title=\"trait core::clone::Clone\">Clone</a> for <a class=\"enum\" href=\"totp_rs/enum.Algorithm.html\" title=\"enum totp_rs::Algorithm\">Algorithm</a>"],["impl <a class=\"trait\" href=\"https://doc.rust-lang.org/1.93.1/core/clone/trait.Clone.html\" title=\"trait core::clone::Clone\">Clone</a> for <a class=\"enum\" href=\"totp_rs/enum.Secret.html\" title=\"enum totp_rs::Secret\">Secret</a>"],["impl <a class=\"trait\" href=\"https://doc.rust-lang.org/1.93.1/core/clone/trait.Clone.html\" title=\"trait core::clone::Clone\">Clone</a> for <a class=\"enum\" href=\"totp_rs/enum.SecretParseError.html\" title=\"enum totp_rs::SecretParseError\">SecretParseError</a>"],["impl <a class=\"trait\" href=\"https://doc.rust-lang.org/1.93.1/core/clone/trait.Clone.html\" title=\"trait core::clone::Clone\">Clone</a> for <a class=\"struct\" href=\"totp_rs/struct.Rfc6238.html\" title=\"struct totp_rs::Rfc6238\">Rfc6238</a>"],["impl <a class=\"trait\" href=\"https://doc.rust-lang.org/1.93.1/core/clone/trait.Clone.html\" title=\"trait core::clone::Clone\">Clone</a> for <a class=\"struct\" href=\"totp_rs/struct.TOTP.html\" title=\"struct totp_rs::TOTP\">TOTP</a>"]]]]);
if (window.register_implementors) {
window.register_implementors(implementors);
} else {
window.pending_implementors = implementors;
}
})()
//{"start":57,"fragment_lengths":[1266]}

View File

@@ -0,0 +1,9 @@
(function() {
var implementors = Object.fromEntries([["totp_rs",[["impl <a class=\"trait\" href=\"https://doc.rust-lang.org/1.93.1/core/cmp/trait.Eq.html\" title=\"trait core::cmp::Eq\">Eq</a> for <a class=\"enum\" href=\"totp_rs/enum.Algorithm.html\" title=\"enum totp_rs::Algorithm\">Algorithm</a>"],["impl <a class=\"trait\" href=\"https://doc.rust-lang.org/1.93.1/core/cmp/trait.Eq.html\" title=\"trait core::cmp::Eq\">Eq</a> for <a class=\"enum\" href=\"totp_rs/enum.Rfc6238Error.html\" title=\"enum totp_rs::Rfc6238Error\">Rfc6238Error</a>"],["impl <a class=\"trait\" href=\"https://doc.rust-lang.org/1.93.1/core/cmp/trait.Eq.html\" title=\"trait core::cmp::Eq\">Eq</a> for <a class=\"enum\" href=\"totp_rs/enum.Secret.html\" title=\"enum totp_rs::Secret\">Secret</a>"],["impl <a class=\"trait\" href=\"https://doc.rust-lang.org/1.93.1/core/cmp/trait.Eq.html\" title=\"trait core::cmp::Eq\">Eq</a> for <a class=\"enum\" href=\"totp_rs/enum.SecretParseError.html\" title=\"enum totp_rs::SecretParseError\">SecretParseError</a>"],["impl <a class=\"trait\" href=\"https://doc.rust-lang.org/1.93.1/core/cmp/trait.Eq.html\" title=\"trait core::cmp::Eq\">Eq</a> for <a class=\"enum\" href=\"totp_rs/enum.TotpUrlError.html\" title=\"enum totp_rs::TotpUrlError\">TotpUrlError</a>"]]]]);
if (window.register_implementors) {
window.register_implementors(implementors);
} else {
window.pending_implementors = implementors;
}
})()
//{"start":57,"fragment_lengths":[1228]}

View File

@@ -0,0 +1,9 @@
(function() {
var implementors = Object.fromEntries([["totp_rs",[["impl <a class=\"trait\" href=\"https://doc.rust-lang.org/1.93.1/core/cmp/trait.PartialEq.html\" title=\"trait core::cmp::PartialEq\">PartialEq</a> for <a class=\"enum\" href=\"totp_rs/enum.Algorithm.html\" title=\"enum totp_rs::Algorithm\">Algorithm</a>"],["impl <a class=\"trait\" href=\"https://doc.rust-lang.org/1.93.1/core/cmp/trait.PartialEq.html\" title=\"trait core::cmp::PartialEq\">PartialEq</a> for <a class=\"enum\" href=\"totp_rs/enum.Rfc6238Error.html\" title=\"enum totp_rs::Rfc6238Error\">Rfc6238Error</a>"],["impl <a class=\"trait\" href=\"https://doc.rust-lang.org/1.93.1/core/cmp/trait.PartialEq.html\" title=\"trait core::cmp::PartialEq\">PartialEq</a> for <a class=\"enum\" href=\"totp_rs/enum.Secret.html\" title=\"enum totp_rs::Secret\">Secret</a>"],["impl <a class=\"trait\" href=\"https://doc.rust-lang.org/1.93.1/core/cmp/trait.PartialEq.html\" title=\"trait core::cmp::PartialEq\">PartialEq</a> for <a class=\"enum\" href=\"totp_rs/enum.SecretParseError.html\" title=\"enum totp_rs::SecretParseError\">SecretParseError</a>"],["impl <a class=\"trait\" href=\"https://doc.rust-lang.org/1.93.1/core/cmp/trait.PartialEq.html\" title=\"trait core::cmp::PartialEq\">PartialEq</a> for <a class=\"enum\" href=\"totp_rs/enum.TotpUrlError.html\" title=\"enum totp_rs::TotpUrlError\">TotpUrlError</a>"],["impl <a class=\"trait\" href=\"https://doc.rust-lang.org/1.93.1/core/cmp/trait.PartialEq.html\" title=\"trait core::cmp::PartialEq\">PartialEq</a> for <a class=\"struct\" href=\"totp_rs/struct.TOTP.html\" title=\"struct totp_rs::TOTP\">TOTP</a>"]]]]);
if (window.register_implementors) {
window.register_implementors(implementors);
} else {
window.pending_implementors = implementors;
}
})()
//{"start":57,"fragment_lengths":[1582]}

View File

@@ -0,0 +1,9 @@
(function() {
var implementors = Object.fromEntries([["totp_rs",[["impl <a class=\"trait\" href=\"https://doc.rust-lang.org/1.93.1/core/convert/trait.From.html\" title=\"trait core::convert::From\">From</a>&lt;<a class=\"enum\" href=\"totp_rs/enum.Rfc6238Error.html\" title=\"enum totp_rs::Rfc6238Error\">Rfc6238Error</a>&gt; for <a class=\"enum\" href=\"totp_rs/enum.TotpUrlError.html\" title=\"enum totp_rs::TotpUrlError\">TotpUrlError</a>"]]]]);
if (window.register_implementors) {
window.register_implementors(implementors);
} else {
window.pending_implementors = implementors;
}
})()
//{"start":57,"fragment_lengths":[392]}

View File

@@ -0,0 +1,9 @@
(function() {
var implementors = Object.fromEntries([["totp_rs",[["impl <a class=\"trait\" href=\"https://doc.rust-lang.org/1.93.1/core/convert/trait.TryFrom.html\" title=\"trait core::convert::TryFrom\">TryFrom</a>&lt;<a class=\"struct\" href=\"totp_rs/struct.Rfc6238.html\" title=\"struct totp_rs::Rfc6238\">Rfc6238</a>&gt; for <a class=\"struct\" href=\"totp_rs/struct.TOTP.html\" title=\"struct totp_rs::TOTP\">TOTP</a>"]]]]);
if (window.register_implementors) {
window.register_implementors(implementors);
} else {
window.pending_implementors = implementors;
}
})()
//{"start":57,"fragment_lengths":[374]}

View File

@@ -0,0 +1,9 @@
(function() {
var implementors = Object.fromEntries([["totp_rs",[["impl <a class=\"trait\" href=\"https://doc.rust-lang.org/1.93.1/core/default/trait.Default.html\" title=\"trait core::default::Default\">Default</a> for <a class=\"enum\" href=\"totp_rs/enum.Algorithm.html\" title=\"enum totp_rs::Algorithm\">Algorithm</a>"]]]]);
if (window.register_implementors) {
window.register_implementors(implementors);
} else {
window.pending_implementors = implementors;
}
})()
//{"start":57,"fragment_lengths":[273]}

View File

@@ -0,0 +1,9 @@
(function() {
var implementors = Object.fromEntries([["totp_rs",[["impl <a class=\"trait\" href=\"https://doc.rust-lang.org/1.93.1/core/error/trait.Error.html\" title=\"trait core::error::Error\">Error</a> for <a class=\"enum\" href=\"totp_rs/enum.Rfc6238Error.html\" title=\"enum totp_rs::Rfc6238Error\">Rfc6238Error</a>"],["impl <a class=\"trait\" href=\"https://doc.rust-lang.org/1.93.1/core/error/trait.Error.html\" title=\"trait core::error::Error\">Error</a> for <a class=\"enum\" href=\"totp_rs/enum.Secret.html\" title=\"enum totp_rs::Secret\">Secret</a>"],["impl <a class=\"trait\" href=\"https://doc.rust-lang.org/1.93.1/core/error/trait.Error.html\" title=\"trait core::error::Error\">Error</a> for <a class=\"enum\" href=\"totp_rs/enum.SecretParseError.html\" title=\"enum totp_rs::SecretParseError\">SecretParseError</a>"],["impl <a class=\"trait\" href=\"https://doc.rust-lang.org/1.93.1/core/error/trait.Error.html\" title=\"trait core::error::Error\">Error</a> for <a class=\"enum\" href=\"totp_rs/enum.TotpUrlError.html\" title=\"enum totp_rs::TotpUrlError\">TotpUrlError</a>"]]]]);
if (window.register_implementors) {
window.register_implementors(implementors);
} else {
window.pending_implementors = implementors;
}
})()
//{"start":57,"fragment_lengths":[1043]}

View File

@@ -0,0 +1,9 @@
(function() {
var implementors = Object.fromEntries([["totp_rs",[["impl <a class=\"trait\" href=\"https://doc.rust-lang.org/1.93.1/core/fmt/trait.Debug.html\" title=\"trait core::fmt::Debug\">Debug</a> for <a class=\"enum\" href=\"totp_rs/enum.Algorithm.html\" title=\"enum totp_rs::Algorithm\">Algorithm</a>"],["impl <a class=\"trait\" href=\"https://doc.rust-lang.org/1.93.1/core/fmt/trait.Debug.html\" title=\"trait core::fmt::Debug\">Debug</a> for <a class=\"enum\" href=\"totp_rs/enum.Rfc6238Error.html\" title=\"enum totp_rs::Rfc6238Error\">Rfc6238Error</a>"],["impl <a class=\"trait\" href=\"https://doc.rust-lang.org/1.93.1/core/fmt/trait.Debug.html\" title=\"trait core::fmt::Debug\">Debug</a> for <a class=\"enum\" href=\"totp_rs/enum.Secret.html\" title=\"enum totp_rs::Secret\">Secret</a>"],["impl <a class=\"trait\" href=\"https://doc.rust-lang.org/1.93.1/core/fmt/trait.Debug.html\" title=\"trait core::fmt::Debug\">Debug</a> for <a class=\"enum\" href=\"totp_rs/enum.SecretParseError.html\" title=\"enum totp_rs::SecretParseError\">SecretParseError</a>"],["impl <a class=\"trait\" href=\"https://doc.rust-lang.org/1.93.1/core/fmt/trait.Debug.html\" title=\"trait core::fmt::Debug\">Debug</a> for <a class=\"enum\" href=\"totp_rs/enum.TotpUrlError.html\" title=\"enum totp_rs::TotpUrlError\">TotpUrlError</a>"],["impl <a class=\"trait\" href=\"https://doc.rust-lang.org/1.93.1/core/fmt/trait.Debug.html\" title=\"trait core::fmt::Debug\">Debug</a> for <a class=\"struct\" href=\"totp_rs/struct.Rfc6238.html\" title=\"struct totp_rs::Rfc6238\">Rfc6238</a>"],["impl <a class=\"trait\" href=\"https://doc.rust-lang.org/1.93.1/core/fmt/trait.Debug.html\" title=\"trait core::fmt::Debug\">Debug</a> for <a class=\"struct\" href=\"totp_rs/struct.TOTP.html\" title=\"struct totp_rs::TOTP\">TOTP</a>"]]]]);
if (window.register_implementors) {
window.register_implementors(implementors);
} else {
window.pending_implementors = implementors;
}
})()
//{"start":57,"fragment_lengths":[1756]}

View File

@@ -0,0 +1,9 @@
(function() {
var implementors = Object.fromEntries([["totp_rs",[["impl <a class=\"trait\" href=\"https://doc.rust-lang.org/1.93.1/core/fmt/trait.Display.html\" title=\"trait core::fmt::Display\">Display</a> for <a class=\"enum\" href=\"totp_rs/enum.Algorithm.html\" title=\"enum totp_rs::Algorithm\">Algorithm</a>"],["impl <a class=\"trait\" href=\"https://doc.rust-lang.org/1.93.1/core/fmt/trait.Display.html\" title=\"trait core::fmt::Display\">Display</a> for <a class=\"enum\" href=\"totp_rs/enum.Rfc6238Error.html\" title=\"enum totp_rs::Rfc6238Error\">Rfc6238Error</a>"],["impl <a class=\"trait\" href=\"https://doc.rust-lang.org/1.93.1/core/fmt/trait.Display.html\" title=\"trait core::fmt::Display\">Display</a> for <a class=\"enum\" href=\"totp_rs/enum.Secret.html\" title=\"enum totp_rs::Secret\">Secret</a>"],["impl <a class=\"trait\" href=\"https://doc.rust-lang.org/1.93.1/core/fmt/trait.Display.html\" title=\"trait core::fmt::Display\">Display</a> for <a class=\"enum\" href=\"totp_rs/enum.SecretParseError.html\" title=\"enum totp_rs::SecretParseError\">SecretParseError</a>"],["impl <a class=\"trait\" href=\"https://doc.rust-lang.org/1.93.1/core/fmt/trait.Display.html\" title=\"trait core::fmt::Display\">Display</a> for <a class=\"enum\" href=\"totp_rs/enum.TotpUrlError.html\" title=\"enum totp_rs::TotpUrlError\">TotpUrlError</a>"],["impl <a class=\"trait\" href=\"https://doc.rust-lang.org/1.93.1/core/fmt/trait.Display.html\" title=\"trait core::fmt::Display\">Display</a> for <a class=\"struct\" href=\"totp_rs/struct.TOTP.html\" title=\"struct totp_rs::TOTP\">TOTP</a>"]]]]);
if (window.register_implementors) {
window.register_implementors(implementors);
} else {
window.pending_implementors = implementors;
}
})()
//{"start":57,"fragment_lengths":[1546]}

View File

@@ -0,0 +1,9 @@
(function() {
var implementors = Object.fromEntries([["totp_rs",[["impl <a class=\"trait\" href=\"https://doc.rust-lang.org/1.93.1/core/marker/trait.Copy.html\" title=\"trait core::marker::Copy\">Copy</a> for <a class=\"enum\" href=\"totp_rs/enum.Algorithm.html\" title=\"enum totp_rs::Algorithm\">Algorithm</a>"]]]]);
if (window.register_implementors) {
window.register_implementors(implementors);
} else {
window.pending_implementors = implementors;
}
})()
//{"start":57,"fragment_lengths":[262]}

View File

@@ -0,0 +1,9 @@
(function() {
var implementors = Object.fromEntries([["totp_rs",[["impl <a class=\"trait\" href=\"https://doc.rust-lang.org/1.93.1/core/marker/trait.Freeze.html\" title=\"trait core::marker::Freeze\">Freeze</a> for <a class=\"enum\" href=\"totp_rs/enum.Algorithm.html\" title=\"enum totp_rs::Algorithm\">Algorithm</a>",1,["totp_rs::Algorithm"]],["impl <a class=\"trait\" href=\"https://doc.rust-lang.org/1.93.1/core/marker/trait.Freeze.html\" title=\"trait core::marker::Freeze\">Freeze</a> for <a class=\"enum\" href=\"totp_rs/enum.Rfc6238Error.html\" title=\"enum totp_rs::Rfc6238Error\">Rfc6238Error</a>",1,["totp_rs::rfc::Rfc6238Error"]],["impl <a class=\"trait\" href=\"https://doc.rust-lang.org/1.93.1/core/marker/trait.Freeze.html\" title=\"trait core::marker::Freeze\">Freeze</a> for <a class=\"enum\" href=\"totp_rs/enum.Secret.html\" title=\"enum totp_rs::Secret\">Secret</a>",1,["totp_rs::secret::Secret"]],["impl <a class=\"trait\" href=\"https://doc.rust-lang.org/1.93.1/core/marker/trait.Freeze.html\" title=\"trait core::marker::Freeze\">Freeze</a> for <a class=\"enum\" href=\"totp_rs/enum.SecretParseError.html\" title=\"enum totp_rs::SecretParseError\">SecretParseError</a>",1,["totp_rs::secret::SecretParseError"]],["impl <a class=\"trait\" href=\"https://doc.rust-lang.org/1.93.1/core/marker/trait.Freeze.html\" title=\"trait core::marker::Freeze\">Freeze</a> for <a class=\"enum\" href=\"totp_rs/enum.TotpUrlError.html\" title=\"enum totp_rs::TotpUrlError\">TotpUrlError</a>",1,["totp_rs::url_error::TotpUrlError"]],["impl <a class=\"trait\" href=\"https://doc.rust-lang.org/1.93.1/core/marker/trait.Freeze.html\" title=\"trait core::marker::Freeze\">Freeze</a> for <a class=\"struct\" href=\"totp_rs/struct.Rfc6238.html\" title=\"struct totp_rs::Rfc6238\">Rfc6238</a>",1,["totp_rs::rfc::Rfc6238"]],["impl <a class=\"trait\" href=\"https://doc.rust-lang.org/1.93.1/core/marker/trait.Freeze.html\" title=\"trait core::marker::Freeze\">Freeze</a> for <a class=\"struct\" href=\"totp_rs/struct.TOTP.html\" title=\"struct totp_rs::TOTP\">TOTP</a>",1,["totp_rs::TOTP"]]]]]);
if (window.register_implementors) {
window.register_implementors(implementors);
} else {
window.pending_implementors = implementors;
}
})()
//{"start":57,"fragment_lengths":[2034]}

View File

@@ -0,0 +1,9 @@
(function() {
var implementors = Object.fromEntries([["totp_rs",[["impl <a class=\"trait\" href=\"https://doc.rust-lang.org/1.93.1/core/marker/trait.Send.html\" title=\"trait core::marker::Send\">Send</a> for <a class=\"enum\" href=\"totp_rs/enum.Algorithm.html\" title=\"enum totp_rs::Algorithm\">Algorithm</a>",1,["totp_rs::Algorithm"]],["impl <a class=\"trait\" href=\"https://doc.rust-lang.org/1.93.1/core/marker/trait.Send.html\" title=\"trait core::marker::Send\">Send</a> for <a class=\"enum\" href=\"totp_rs/enum.Rfc6238Error.html\" title=\"enum totp_rs::Rfc6238Error\">Rfc6238Error</a>",1,["totp_rs::rfc::Rfc6238Error"]],["impl <a class=\"trait\" href=\"https://doc.rust-lang.org/1.93.1/core/marker/trait.Send.html\" title=\"trait core::marker::Send\">Send</a> for <a class=\"enum\" href=\"totp_rs/enum.Secret.html\" title=\"enum totp_rs::Secret\">Secret</a>",1,["totp_rs::secret::Secret"]],["impl <a class=\"trait\" href=\"https://doc.rust-lang.org/1.93.1/core/marker/trait.Send.html\" title=\"trait core::marker::Send\">Send</a> for <a class=\"enum\" href=\"totp_rs/enum.SecretParseError.html\" title=\"enum totp_rs::SecretParseError\">SecretParseError</a>",1,["totp_rs::secret::SecretParseError"]],["impl <a class=\"trait\" href=\"https://doc.rust-lang.org/1.93.1/core/marker/trait.Send.html\" title=\"trait core::marker::Send\">Send</a> for <a class=\"enum\" href=\"totp_rs/enum.TotpUrlError.html\" title=\"enum totp_rs::TotpUrlError\">TotpUrlError</a>",1,["totp_rs::url_error::TotpUrlError"]],["impl <a class=\"trait\" href=\"https://doc.rust-lang.org/1.93.1/core/marker/trait.Send.html\" title=\"trait core::marker::Send\">Send</a> for <a class=\"struct\" href=\"totp_rs/struct.Rfc6238.html\" title=\"struct totp_rs::Rfc6238\">Rfc6238</a>",1,["totp_rs::rfc::Rfc6238"]],["impl <a class=\"trait\" href=\"https://doc.rust-lang.org/1.93.1/core/marker/trait.Send.html\" title=\"trait core::marker::Send\">Send</a> for <a class=\"struct\" href=\"totp_rs/struct.TOTP.html\" title=\"struct totp_rs::TOTP\">TOTP</a>",1,["totp_rs::TOTP"]]]]]);
if (window.register_implementors) {
window.register_implementors(implementors);
} else {
window.pending_implementors = implementors;
}
})()
//{"start":57,"fragment_lengths":[1992]}

View File

@@ -0,0 +1,9 @@
(function() {
var implementors = Object.fromEntries([["totp_rs",[["impl <a class=\"trait\" href=\"https://doc.rust-lang.org/1.93.1/core/marker/trait.StructuralPartialEq.html\" title=\"trait core::marker::StructuralPartialEq\">StructuralPartialEq</a> for <a class=\"enum\" href=\"totp_rs/enum.Algorithm.html\" title=\"enum totp_rs::Algorithm\">Algorithm</a>"],["impl <a class=\"trait\" href=\"https://doc.rust-lang.org/1.93.1/core/marker/trait.StructuralPartialEq.html\" title=\"trait core::marker::StructuralPartialEq\">StructuralPartialEq</a> for <a class=\"enum\" href=\"totp_rs/enum.Rfc6238Error.html\" title=\"enum totp_rs::Rfc6238Error\">Rfc6238Error</a>"],["impl <a class=\"trait\" href=\"https://doc.rust-lang.org/1.93.1/core/marker/trait.StructuralPartialEq.html\" title=\"trait core::marker::StructuralPartialEq\">StructuralPartialEq</a> for <a class=\"enum\" href=\"totp_rs/enum.SecretParseError.html\" title=\"enum totp_rs::SecretParseError\">SecretParseError</a>"],["impl <a class=\"trait\" href=\"https://doc.rust-lang.org/1.93.1/core/marker/trait.StructuralPartialEq.html\" title=\"trait core::marker::StructuralPartialEq\">StructuralPartialEq</a> for <a class=\"enum\" href=\"totp_rs/enum.TotpUrlError.html\" title=\"enum totp_rs::TotpUrlError\">TotpUrlError</a>"]]]]);
if (window.register_implementors) {
window.register_implementors(implementors);
} else {
window.pending_implementors = implementors;
}
})()
//{"start":57,"fragment_lengths":[1228]}

View File

@@ -0,0 +1,9 @@
(function() {
var implementors = Object.fromEntries([["totp_rs",[["impl <a class=\"trait\" href=\"https://doc.rust-lang.org/1.93.1/core/marker/trait.Sync.html\" title=\"trait core::marker::Sync\">Sync</a> for <a class=\"enum\" href=\"totp_rs/enum.Algorithm.html\" title=\"enum totp_rs::Algorithm\">Algorithm</a>",1,["totp_rs::Algorithm"]],["impl <a class=\"trait\" href=\"https://doc.rust-lang.org/1.93.1/core/marker/trait.Sync.html\" title=\"trait core::marker::Sync\">Sync</a> for <a class=\"enum\" href=\"totp_rs/enum.Rfc6238Error.html\" title=\"enum totp_rs::Rfc6238Error\">Rfc6238Error</a>",1,["totp_rs::rfc::Rfc6238Error"]],["impl <a class=\"trait\" href=\"https://doc.rust-lang.org/1.93.1/core/marker/trait.Sync.html\" title=\"trait core::marker::Sync\">Sync</a> for <a class=\"enum\" href=\"totp_rs/enum.Secret.html\" title=\"enum totp_rs::Secret\">Secret</a>",1,["totp_rs::secret::Secret"]],["impl <a class=\"trait\" href=\"https://doc.rust-lang.org/1.93.1/core/marker/trait.Sync.html\" title=\"trait core::marker::Sync\">Sync</a> for <a class=\"enum\" href=\"totp_rs/enum.SecretParseError.html\" title=\"enum totp_rs::SecretParseError\">SecretParseError</a>",1,["totp_rs::secret::SecretParseError"]],["impl <a class=\"trait\" href=\"https://doc.rust-lang.org/1.93.1/core/marker/trait.Sync.html\" title=\"trait core::marker::Sync\">Sync</a> for <a class=\"enum\" href=\"totp_rs/enum.TotpUrlError.html\" title=\"enum totp_rs::TotpUrlError\">TotpUrlError</a>",1,["totp_rs::url_error::TotpUrlError"]],["impl <a class=\"trait\" href=\"https://doc.rust-lang.org/1.93.1/core/marker/trait.Sync.html\" title=\"trait core::marker::Sync\">Sync</a> for <a class=\"struct\" href=\"totp_rs/struct.Rfc6238.html\" title=\"struct totp_rs::Rfc6238\">Rfc6238</a>",1,["totp_rs::rfc::Rfc6238"]],["impl <a class=\"trait\" href=\"https://doc.rust-lang.org/1.93.1/core/marker/trait.Sync.html\" title=\"trait core::marker::Sync\">Sync</a> for <a class=\"struct\" href=\"totp_rs/struct.TOTP.html\" title=\"struct totp_rs::TOTP\">TOTP</a>",1,["totp_rs::TOTP"]]]]]);
if (window.register_implementors) {
window.register_implementors(implementors);
} else {
window.pending_implementors = implementors;
}
})()
//{"start":57,"fragment_lengths":[1992]}

View File

@@ -0,0 +1,9 @@
(function() {
var implementors = Object.fromEntries([["totp_rs",[["impl <a class=\"trait\" href=\"https://doc.rust-lang.org/1.93.1/core/marker/trait.Unpin.html\" title=\"trait core::marker::Unpin\">Unpin</a> for <a class=\"enum\" href=\"totp_rs/enum.Algorithm.html\" title=\"enum totp_rs::Algorithm\">Algorithm</a>",1,["totp_rs::Algorithm"]],["impl <a class=\"trait\" href=\"https://doc.rust-lang.org/1.93.1/core/marker/trait.Unpin.html\" title=\"trait core::marker::Unpin\">Unpin</a> for <a class=\"enum\" href=\"totp_rs/enum.Rfc6238Error.html\" title=\"enum totp_rs::Rfc6238Error\">Rfc6238Error</a>",1,["totp_rs::rfc::Rfc6238Error"]],["impl <a class=\"trait\" href=\"https://doc.rust-lang.org/1.93.1/core/marker/trait.Unpin.html\" title=\"trait core::marker::Unpin\">Unpin</a> for <a class=\"enum\" href=\"totp_rs/enum.Secret.html\" title=\"enum totp_rs::Secret\">Secret</a>",1,["totp_rs::secret::Secret"]],["impl <a class=\"trait\" href=\"https://doc.rust-lang.org/1.93.1/core/marker/trait.Unpin.html\" title=\"trait core::marker::Unpin\">Unpin</a> for <a class=\"enum\" href=\"totp_rs/enum.SecretParseError.html\" title=\"enum totp_rs::SecretParseError\">SecretParseError</a>",1,["totp_rs::secret::SecretParseError"]],["impl <a class=\"trait\" href=\"https://doc.rust-lang.org/1.93.1/core/marker/trait.Unpin.html\" title=\"trait core::marker::Unpin\">Unpin</a> for <a class=\"enum\" href=\"totp_rs/enum.TotpUrlError.html\" title=\"enum totp_rs::TotpUrlError\">TotpUrlError</a>",1,["totp_rs::url_error::TotpUrlError"]],["impl <a class=\"trait\" href=\"https://doc.rust-lang.org/1.93.1/core/marker/trait.Unpin.html\" title=\"trait core::marker::Unpin\">Unpin</a> for <a class=\"struct\" href=\"totp_rs/struct.Rfc6238.html\" title=\"struct totp_rs::Rfc6238\">Rfc6238</a>",1,["totp_rs::rfc::Rfc6238"]],["impl <a class=\"trait\" href=\"https://doc.rust-lang.org/1.93.1/core/marker/trait.Unpin.html\" title=\"trait core::marker::Unpin\">Unpin</a> for <a class=\"struct\" href=\"totp_rs/struct.TOTP.html\" title=\"struct totp_rs::TOTP\">TOTP</a>",1,["totp_rs::TOTP"]]]]]);
if (window.register_implementors) {
window.register_implementors(implementors);
} else {
window.pending_implementors = implementors;
}
})()
//{"start":57,"fragment_lengths":[2013]}

View File

@@ -0,0 +1,9 @@
(function() {
var implementors = Object.fromEntries([["totp_rs",[["impl UnsafeUnpin for <a class=\"enum\" href=\"totp_rs/enum.Algorithm.html\" title=\"enum totp_rs::Algorithm\">Algorithm</a>",1,["totp_rs::Algorithm"]],["impl UnsafeUnpin for <a class=\"enum\" href=\"totp_rs/enum.Rfc6238Error.html\" title=\"enum totp_rs::Rfc6238Error\">Rfc6238Error</a>",1,["totp_rs::rfc::Rfc6238Error"]],["impl UnsafeUnpin for <a class=\"enum\" href=\"totp_rs/enum.Secret.html\" title=\"enum totp_rs::Secret\">Secret</a>",1,["totp_rs::secret::Secret"]],["impl UnsafeUnpin for <a class=\"enum\" href=\"totp_rs/enum.SecretParseError.html\" title=\"enum totp_rs::SecretParseError\">SecretParseError</a>",1,["totp_rs::secret::SecretParseError"]],["impl UnsafeUnpin for <a class=\"enum\" href=\"totp_rs/enum.TotpUrlError.html\" title=\"enum totp_rs::TotpUrlError\">TotpUrlError</a>",1,["totp_rs::url_error::TotpUrlError"]],["impl UnsafeUnpin for <a class=\"struct\" href=\"totp_rs/struct.Rfc6238.html\" title=\"struct totp_rs::Rfc6238\">Rfc6238</a>",1,["totp_rs::rfc::Rfc6238"]],["impl UnsafeUnpin for <a class=\"struct\" href=\"totp_rs/struct.TOTP.html\" title=\"struct totp_rs::TOTP\">TOTP</a>",1,["totp_rs::TOTP"]]]]]);
if (window.register_implementors) {
window.register_implementors(implementors);
} else {
window.pending_implementors = implementors;
}
})()
//{"start":57,"fragment_lengths":[1145]}

View File

@@ -0,0 +1,9 @@
(function() {
var implementors = Object.fromEntries([["totp_rs",[["impl <a class=\"trait\" href=\"https://doc.rust-lang.org/1.93.1/core/panic/unwind_safe/trait.RefUnwindSafe.html\" title=\"trait core::panic::unwind_safe::RefUnwindSafe\">RefUnwindSafe</a> for <a class=\"enum\" href=\"totp_rs/enum.Algorithm.html\" title=\"enum totp_rs::Algorithm\">Algorithm</a>",1,["totp_rs::Algorithm"]],["impl <a class=\"trait\" href=\"https://doc.rust-lang.org/1.93.1/core/panic/unwind_safe/trait.RefUnwindSafe.html\" title=\"trait core::panic::unwind_safe::RefUnwindSafe\">RefUnwindSafe</a> for <a class=\"enum\" href=\"totp_rs/enum.Rfc6238Error.html\" title=\"enum totp_rs::Rfc6238Error\">Rfc6238Error</a>",1,["totp_rs::rfc::Rfc6238Error"]],["impl <a class=\"trait\" href=\"https://doc.rust-lang.org/1.93.1/core/panic/unwind_safe/trait.RefUnwindSafe.html\" title=\"trait core::panic::unwind_safe::RefUnwindSafe\">RefUnwindSafe</a> for <a class=\"enum\" href=\"totp_rs/enum.Secret.html\" title=\"enum totp_rs::Secret\">Secret</a>",1,["totp_rs::secret::Secret"]],["impl <a class=\"trait\" href=\"https://doc.rust-lang.org/1.93.1/core/panic/unwind_safe/trait.RefUnwindSafe.html\" title=\"trait core::panic::unwind_safe::RefUnwindSafe\">RefUnwindSafe</a> for <a class=\"enum\" href=\"totp_rs/enum.SecretParseError.html\" title=\"enum totp_rs::SecretParseError\">SecretParseError</a>",1,["totp_rs::secret::SecretParseError"]],["impl <a class=\"trait\" href=\"https://doc.rust-lang.org/1.93.1/core/panic/unwind_safe/trait.RefUnwindSafe.html\" title=\"trait core::panic::unwind_safe::RefUnwindSafe\">RefUnwindSafe</a> for <a class=\"enum\" href=\"totp_rs/enum.TotpUrlError.html\" title=\"enum totp_rs::TotpUrlError\">TotpUrlError</a>",1,["totp_rs::url_error::TotpUrlError"]],["impl <a class=\"trait\" href=\"https://doc.rust-lang.org/1.93.1/core/panic/unwind_safe/trait.RefUnwindSafe.html\" title=\"trait core::panic::unwind_safe::RefUnwindSafe\">RefUnwindSafe</a> for <a class=\"struct\" href=\"totp_rs/struct.Rfc6238.html\" title=\"struct totp_rs::Rfc6238\">Rfc6238</a>",1,["totp_rs::rfc::Rfc6238"]],["impl <a class=\"trait\" href=\"https://doc.rust-lang.org/1.93.1/core/panic/unwind_safe/trait.RefUnwindSafe.html\" title=\"trait core::panic::unwind_safe::RefUnwindSafe\">RefUnwindSafe</a> for <a class=\"struct\" href=\"totp_rs/struct.TOTP.html\" title=\"struct totp_rs::TOTP\">TOTP</a>",1,["totp_rs::TOTP"]]]]]);
if (window.register_implementors) {
window.register_implementors(implementors);
} else {
window.pending_implementors = implementors;
}
})()
//{"start":57,"fragment_lengths":[2342]}

View File

@@ -0,0 +1,9 @@
(function() {
var implementors = Object.fromEntries([["totp_rs",[["impl <a class=\"trait\" href=\"https://doc.rust-lang.org/1.93.1/core/panic/unwind_safe/trait.UnwindSafe.html\" title=\"trait core::panic::unwind_safe::UnwindSafe\">UnwindSafe</a> for <a class=\"enum\" href=\"totp_rs/enum.Algorithm.html\" title=\"enum totp_rs::Algorithm\">Algorithm</a>",1,["totp_rs::Algorithm"]],["impl <a class=\"trait\" href=\"https://doc.rust-lang.org/1.93.1/core/panic/unwind_safe/trait.UnwindSafe.html\" title=\"trait core::panic::unwind_safe::UnwindSafe\">UnwindSafe</a> for <a class=\"enum\" href=\"totp_rs/enum.Rfc6238Error.html\" title=\"enum totp_rs::Rfc6238Error\">Rfc6238Error</a>",1,["totp_rs::rfc::Rfc6238Error"]],["impl <a class=\"trait\" href=\"https://doc.rust-lang.org/1.93.1/core/panic/unwind_safe/trait.UnwindSafe.html\" title=\"trait core::panic::unwind_safe::UnwindSafe\">UnwindSafe</a> for <a class=\"enum\" href=\"totp_rs/enum.Secret.html\" title=\"enum totp_rs::Secret\">Secret</a>",1,["totp_rs::secret::Secret"]],["impl <a class=\"trait\" href=\"https://doc.rust-lang.org/1.93.1/core/panic/unwind_safe/trait.UnwindSafe.html\" title=\"trait core::panic::unwind_safe::UnwindSafe\">UnwindSafe</a> for <a class=\"enum\" href=\"totp_rs/enum.SecretParseError.html\" title=\"enum totp_rs::SecretParseError\">SecretParseError</a>",1,["totp_rs::secret::SecretParseError"]],["impl <a class=\"trait\" href=\"https://doc.rust-lang.org/1.93.1/core/panic/unwind_safe/trait.UnwindSafe.html\" title=\"trait core::panic::unwind_safe::UnwindSafe\">UnwindSafe</a> for <a class=\"enum\" href=\"totp_rs/enum.TotpUrlError.html\" title=\"enum totp_rs::TotpUrlError\">TotpUrlError</a>",1,["totp_rs::url_error::TotpUrlError"]],["impl <a class=\"trait\" href=\"https://doc.rust-lang.org/1.93.1/core/panic/unwind_safe/trait.UnwindSafe.html\" title=\"trait core::panic::unwind_safe::UnwindSafe\">UnwindSafe</a> for <a class=\"struct\" href=\"totp_rs/struct.Rfc6238.html\" title=\"struct totp_rs::Rfc6238\">Rfc6238</a>",1,["totp_rs::rfc::Rfc6238"]],["impl <a class=\"trait\" href=\"https://doc.rust-lang.org/1.93.1/core/panic/unwind_safe/trait.UnwindSafe.html\" title=\"trait core::panic::unwind_safe::UnwindSafe\">UnwindSafe</a> for <a class=\"struct\" href=\"totp_rs/struct.TOTP.html\" title=\"struct totp_rs::TOTP\">TOTP</a>",1,["totp_rs::TOTP"]]]]]);
if (window.register_implementors) {
window.register_implementors(implementors);
} else {
window.pending_implementors = implementors;
}
})()
//{"start":57,"fragment_lengths":[2279]}