diff --git a/implementors/clap/derive/trait.Args.js b/implementors/clap/derive/trait.Args.js new file mode 100644 index 0000000..0f1b32c --- /dev/null +++ b/implementors/clap/derive/trait.Args.js @@ -0,0 +1,3 @@ +(function() {var implementors = {}; +implementors["pages"] = [{"text":"impl Args for Cli","synthetic":false,"types":["pages::Cli"]}]; +if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})() \ No newline at end of file diff --git a/implementors/clap/derive/trait.CommandFactory.js b/implementors/clap/derive/trait.CommandFactory.js new file mode 100644 index 0000000..b04fc65 --- /dev/null +++ b/implementors/clap/derive/trait.CommandFactory.js @@ -0,0 +1,3 @@ +(function() {var implementors = {}; +implementors["pages"] = [{"text":"impl CommandFactory for Cli","synthetic":false,"types":["pages::Cli"]}]; +if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})() \ No newline at end of file diff --git a/implementors/clap/derive/trait.FromArgMatches.js b/implementors/clap/derive/trait.FromArgMatches.js new file mode 100644 index 0000000..a8ed812 --- /dev/null +++ b/implementors/clap/derive/trait.FromArgMatches.js @@ -0,0 +1,3 @@ +(function() {var implementors = {}; +implementors["pages"] = [{"text":"impl FromArgMatches for Cli","synthetic":false,"types":["pages::Cli"]},{"text":"impl FromArgMatches for Commands","synthetic":false,"types":["pages::Commands"]}]; +if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})() \ No newline at end of file diff --git a/implementors/clap/derive/trait.Parser.js b/implementors/clap/derive/trait.Parser.js new file mode 100644 index 0000000..5dc16ba --- /dev/null +++ b/implementors/clap/derive/trait.Parser.js @@ -0,0 +1,3 @@ +(function() {var implementors = {}; +implementors["pages"] = [{"text":"impl Parser for Cli","synthetic":false,"types":["pages::Cli"]}]; +if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})() \ No newline at end of file diff --git a/implementors/clap/derive/trait.Subcommand.js b/implementors/clap/derive/trait.Subcommand.js new file mode 100644 index 0000000..8fad26d --- /dev/null +++ b/implementors/clap/derive/trait.Subcommand.js @@ -0,0 +1,3 @@ +(function() {var implementors = {}; +implementors["pages"] = [{"text":"impl Subcommand for Commands","synthetic":false,"types":["pages::Commands"]}]; +if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})() \ No newline at end of file diff --git a/implementors/core/clone/trait.Clone.js b/implementors/core/clone/trait.Clone.js index 4512312..15f6c71 100644 --- a/implementors/core/clone/trait.Clone.js +++ b/implementors/core/clone/trait.Clone.js @@ -1,3 +1,3 @@ (function() {var implementors = {}; -implementors["pages"] = [{"text":"impl Clone for Ctx","synthetic":false,"types":["pages::ctx::Ctx"]},{"text":"impl Clone for DeployEvent","synthetic":false,"types":["pages::deploy::DeployEvent"]},{"text":"impl Clone for DeploySecret","synthetic":false,"types":["pages::deploy::DeploySecret"]},{"text":"impl Clone for DeployInfo","synthetic":false,"types":["pages::deploy::DeployInfo"]},{"text":"impl Clone for GitFileMode","synthetic":false,"types":["pages::git::GitFileMode"]},{"text":"impl Clone for FileInfo","synthetic":false,"types":["pages::git::FileInfo"]},{"text":"impl Clone for ContentType","synthetic":false,"types":["pages::git::ContentType"]},{"text":"impl<'a> Clone for BuildDetails<'a>","synthetic":false,"types":["pages::meta::BuildDetails"]},{"text":"impl Clone for Page","synthetic":false,"types":["pages::page::Page"]},{"text":"impl Clone for Server","synthetic":false,"types":["pages::settings::Server"]},{"text":"impl Clone for Settings","synthetic":false,"types":["pages::settings::Settings"]}]; +implementors["pages"] = [{"text":"impl Clone for Ctx","synthetic":false,"types":["pages::ctx::Ctx"]},{"text":"impl Clone for Database","synthetic":false,"types":["pages::db::Database"]},{"text":"impl<'a> Clone for Register<'a>","synthetic":false,"types":["pages::db::Register"]},{"text":"impl<'a> Clone for UpdateEmail<'a>","synthetic":false,"types":["pages::db::UpdateEmail"]},{"text":"impl<'a> Clone for Login<'a>","synthetic":false,"types":["pages::db::Login"]},{"text":"impl Clone for NameHash","synthetic":false,"types":["pages::db::NameHash"]},{"text":"impl Clone for DeployEvent","synthetic":false,"types":["pages::deploy::DeployEvent"]},{"text":"impl Clone for DeploySecret","synthetic":false,"types":["pages::deploy::DeploySecret"]},{"text":"impl Clone for DeployInfo","synthetic":false,"types":["pages::deploy::DeployInfo"]},{"text":"impl Clone for GitFileMode","synthetic":false,"types":["pages::git::GitFileMode"]},{"text":"impl Clone for FileInfo","synthetic":false,"types":["pages::git::FileInfo"]},{"text":"impl Clone for ContentType","synthetic":false,"types":["pages::git::ContentType"]},{"text":"impl<'a> Clone for BuildDetails<'a>","synthetic":false,"types":["pages::meta::BuildDetails"]},{"text":"impl Clone for Page","synthetic":false,"types":["pages::page::Page"]},{"text":"impl Clone for Server","synthetic":false,"types":["pages::settings::Server"]},{"text":"impl Clone for DBType","synthetic":false,"types":["pages::settings::DBType"]},{"text":"impl Clone for Database","synthetic":false,"types":["pages::settings::Database"]},{"text":"impl Clone for Settings","synthetic":false,"types":["pages::settings::Settings"]}]; if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})() \ No newline at end of file diff --git a/implementors/core/cmp/trait.Eq.js b/implementors/core/cmp/trait.Eq.js index 4985001..13e284b 100644 --- a/implementors/core/cmp/trait.Eq.js +++ b/implementors/core/cmp/trait.Eq.js @@ -1,3 +1,3 @@ (function() {var implementors = {}; -implementors["pages"] = [{"text":"impl Eq for DeploySecret","synthetic":false,"types":["pages::deploy::DeploySecret"]},{"text":"impl Eq for DeployInfo","synthetic":false,"types":["pages::deploy::DeployInfo"]},{"text":"impl Eq for GitFileMode","synthetic":false,"types":["pages::git::GitFileMode"]},{"text":"impl Eq for FileInfo","synthetic":false,"types":["pages::git::FileInfo"]},{"text":"impl Eq for ContentType","synthetic":false,"types":["pages::git::ContentType"]},{"text":"impl Eq for Page","synthetic":false,"types":["pages::page::Page"]}]; +implementors["pages"] = [{"text":"impl<'a> Eq for Register<'a>","synthetic":false,"types":["pages::db::Register"]},{"text":"impl<'a> Eq for UpdateEmail<'a>","synthetic":false,"types":["pages::db::UpdateEmail"]},{"text":"impl<'a> Eq for Login<'a>","synthetic":false,"types":["pages::db::Login"]},{"text":"impl Eq for NameHash","synthetic":false,"types":["pages::db::NameHash"]},{"text":"impl Eq for DeploySecret","synthetic":false,"types":["pages::deploy::DeploySecret"]},{"text":"impl Eq for DeployInfo","synthetic":false,"types":["pages::deploy::DeployInfo"]},{"text":"impl Eq for GitFileMode","synthetic":false,"types":["pages::git::GitFileMode"]},{"text":"impl Eq for FileInfo","synthetic":false,"types":["pages::git::FileInfo"]},{"text":"impl Eq for ContentType","synthetic":false,"types":["pages::git::ContentType"]},{"text":"impl Eq for Page","synthetic":false,"types":["pages::page::Page"]},{"text":"impl Eq for DBType","synthetic":false,"types":["pages::settings::DBType"]}]; if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})() \ No newline at end of file diff --git a/implementors/core/cmp/trait.PartialEq.js b/implementors/core/cmp/trait.PartialEq.js index 8d8f599..ab0ea24 100644 --- a/implementors/core/cmp/trait.PartialEq.js +++ b/implementors/core/cmp/trait.PartialEq.js @@ -1,3 +1,3 @@ (function() {var implementors = {}; -implementors["pages"] = [{"text":"impl PartialEq<DeploySecret> for DeploySecret","synthetic":false,"types":["pages::deploy::DeploySecret"]},{"text":"impl PartialEq<DeployInfo> for DeployInfo","synthetic":false,"types":["pages::deploy::DeployInfo"]},{"text":"impl PartialEq<FSError> for FSError","synthetic":false,"types":["pages::errors::FSError"]},{"text":"impl PartialEq<ConfigError> for ConfigError","synthetic":false,"types":["pages::errors::ConfigError"]},{"text":"impl PartialEq<ServiceError> for ServiceError","synthetic":false,"types":["pages::errors::ServiceError"]},{"text":"impl PartialEq<GitFileMode> for GitFileMode","synthetic":false,"types":["pages::git::GitFileMode"]},{"text":"impl PartialEq<FileInfo> for FileInfo","synthetic":false,"types":["pages::git::FileInfo"]},{"text":"impl PartialEq<ContentType> for ContentType","synthetic":false,"types":["pages::git::ContentType"]},{"text":"impl PartialEq<Page> for Page","synthetic":false,"types":["pages::page::Page"]}]; +implementors["pages"] = [{"text":"impl<'a> PartialEq<Register<'a>> for Register<'a>","synthetic":false,"types":["pages::db::Register"]},{"text":"impl<'a> PartialEq<UpdateEmail<'a>> for UpdateEmail<'a>","synthetic":false,"types":["pages::db::UpdateEmail"]},{"text":"impl<'a> PartialEq<Login<'a>> for Login<'a>","synthetic":false,"types":["pages::db::Login"]},{"text":"impl PartialEq<NameHash> for NameHash","synthetic":false,"types":["pages::db::NameHash"]},{"text":"impl PartialEq<DeploySecret> for DeploySecret","synthetic":false,"types":["pages::deploy::DeploySecret"]},{"text":"impl PartialEq<DeployInfo> for DeployInfo","synthetic":false,"types":["pages::deploy::DeployInfo"]},{"text":"impl PartialEq<FSError> for FSError","synthetic":false,"types":["pages::errors::FSError"]},{"text":"impl PartialEq<ConfigError> for ConfigError","synthetic":false,"types":["pages::errors::ConfigError"]},{"text":"impl PartialEq<ServiceError> for ServiceError","synthetic":false,"types":["pages::errors::ServiceError"]},{"text":"impl PartialEq<GitFileMode> for GitFileMode","synthetic":false,"types":["pages::git::GitFileMode"]},{"text":"impl PartialEq<FileInfo> for FileInfo","synthetic":false,"types":["pages::git::FileInfo"]},{"text":"impl PartialEq<ContentType> for ContentType","synthetic":false,"types":["pages::git::ContentType"]},{"text":"impl PartialEq<Page> for Page","synthetic":false,"types":["pages::page::Page"]},{"text":"impl PartialEq<DBType> for DBType","synthetic":false,"types":["pages::settings::DBType"]}]; if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})() \ No newline at end of file diff --git a/implementors/core/fmt/trait.Debug.js b/implementors/core/fmt/trait.Debug.js index b2448a7..cd0b802 100644 --- a/implementors/core/fmt/trait.Debug.js +++ b/implementors/core/fmt/trait.Debug.js @@ -1,3 +1,3 @@ (function() {var implementors = {}; -implementors["pages"] = [{"text":"impl Debug for DeployEvent","synthetic":false,"types":["pages::deploy::DeployEvent"]},{"text":"impl Debug for DeploySecret","synthetic":false,"types":["pages::deploy::DeploySecret"]},{"text":"impl Debug for DeployInfo","synthetic":false,"types":["pages::deploy::DeployInfo"]},{"text":"impl Debug for FSError","synthetic":false,"types":["pages::errors::FSError"]},{"text":"impl Debug for ConfigError","synthetic":false,"types":["pages::errors::ConfigError"]},{"text":"impl Debug for ServiceError","synthetic":false,"types":["pages::errors::ServiceError"]},{"text":"impl Debug for ErrorToResponse","synthetic":false,"types":["pages::errors::ErrorToResponse"]},{"text":"impl Debug for GitFileMode","synthetic":false,"types":["pages::git::GitFileMode"]},{"text":"impl Debug for FileInfo","synthetic":false,"types":["pages::git::FileInfo"]},{"text":"impl Debug for ContentType","synthetic":false,"types":["pages::git::ContentType"]},{"text":"impl<'a> Debug for BuildDetails<'a>","synthetic":false,"types":["pages::meta::BuildDetails"]},{"text":"impl Debug for Page","synthetic":false,"types":["pages::page::Page"]},{"text":"impl Debug for Server","synthetic":false,"types":["pages::settings::Server"]},{"text":"impl Debug for Settings","synthetic":false,"types":["pages::settings::Settings"]}]; +implementors["pages"] = [{"text":"impl<'a> Debug for Register<'a>","synthetic":false,"types":["pages::db::Register"]},{"text":"impl<'a> Debug for UpdateEmail<'a>","synthetic":false,"types":["pages::db::UpdateEmail"]},{"text":"impl<'a> Debug for Login<'a>","synthetic":false,"types":["pages::db::Login"]},{"text":"impl Debug for NameHash","synthetic":false,"types":["pages::db::NameHash"]},{"text":"impl Debug for DeployEvent","synthetic":false,"types":["pages::deploy::DeployEvent"]},{"text":"impl Debug for DeploySecret","synthetic":false,"types":["pages::deploy::DeploySecret"]},{"text":"impl Debug for DeployInfo","synthetic":false,"types":["pages::deploy::DeployInfo"]},{"text":"impl Debug for FSError","synthetic":false,"types":["pages::errors::FSError"]},{"text":"impl Debug for ConfigError","synthetic":false,"types":["pages::errors::ConfigError"]},{"text":"impl Debug for ServiceError","synthetic":false,"types":["pages::errors::ServiceError"]},{"text":"impl Debug for ErrorToResponse","synthetic":false,"types":["pages::errors::ErrorToResponse"]},{"text":"impl Debug for GitFileMode","synthetic":false,"types":["pages::git::GitFileMode"]},{"text":"impl Debug for FileInfo","synthetic":false,"types":["pages::git::FileInfo"]},{"text":"impl Debug for ContentType","synthetic":false,"types":["pages::git::ContentType"]},{"text":"impl<'a> Debug for BuildDetails<'a>","synthetic":false,"types":["pages::meta::BuildDetails"]},{"text":"impl Debug for Page","synthetic":false,"types":["pages::page::Page"]},{"text":"impl Debug for Server","synthetic":false,"types":["pages::settings::Server"]},{"text":"impl Debug for DBType","synthetic":false,"types":["pages::settings::DBType"]},{"text":"impl Debug for Database","synthetic":false,"types":["pages::settings::Database"]},{"text":"impl Debug for Settings","synthetic":false,"types":["pages::settings::Settings"]}]; if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})() \ No newline at end of file diff --git a/implementors/core/fmt/trait.Display.js b/implementors/core/fmt/trait.Display.js index 9fe8c4c..2a25853 100644 --- a/implementors/core/fmt/trait.Display.js +++ b/implementors/core/fmt/trait.Display.js @@ -1,3 +1,3 @@ (function() {var implementors = {}; -implementors["pages"] = [{"text":"impl Display for FSError","synthetic":false,"types":["pages::errors::FSError"]},{"text":"impl Display for ConfigError","synthetic":false,"types":["pages::errors::ConfigError"]},{"text":"impl Display for ServiceError","synthetic":false,"types":["pages::errors::ServiceError"]}]; +implementors["pages"] = [{"text":"impl Display for FSError","synthetic":false,"types":["pages::errors::FSError"]},{"text":"impl Display for ConfigError","synthetic":false,"types":["pages::errors::ConfigError"]},{"text":"impl Display for ServiceError","synthetic":false,"types":["pages::errors::ServiceError"]},{"text":"impl Display for DBType","synthetic":false,"types":["pages::settings::DBType"]}]; if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})() \ No newline at end of file diff --git a/implementors/core/marker/trait.Freeze.js b/implementors/core/marker/trait.Freeze.js index 1df019f..6510247 100644 --- a/implementors/core/marker/trait.Freeze.js +++ b/implementors/core/marker/trait.Freeze.js @@ -1,3 +1,3 @@ (function() {var implementors = {}; -implementors["pages"] = [{"text":"impl Freeze for Ctx","synthetic":true,"types":["pages::ctx::Ctx"]},{"text":"impl Freeze for Deploy","synthetic":true,"types":["pages::deploy::routes::Deploy"]},{"text":"impl Freeze for DeployEvent","synthetic":true,"types":["pages::deploy::DeployEvent"]},{"text":"impl Freeze for update","synthetic":true,"types":["pages::deploy::update"]},{"text":"impl Freeze for DeploySecret","synthetic":true,"types":["pages::deploy::DeploySecret"]},{"text":"impl Freeze for DeployInfo","synthetic":true,"types":["pages::deploy::DeployInfo"]},{"text":"impl Freeze for deploy_info","synthetic":true,"types":["pages::deploy::deploy_info"]},{"text":"impl Freeze for FSError","synthetic":true,"types":["pages::errors::FSError"]},{"text":"impl Freeze for ConfigError","synthetic":true,"types":["pages::errors::ConfigError"]},{"text":"impl Freeze for ServiceError","synthetic":true,"types":["pages::errors::ServiceError"]},{"text":"impl Freeze for ErrorToResponse","synthetic":true,"types":["pages::errors::ErrorToResponse"]},{"text":"impl Freeze for GitFileMode","synthetic":true,"types":["pages::git::GitFileMode"]},{"text":"impl Freeze for FileInfo","synthetic":true,"types":["pages::git::FileInfo"]},{"text":"impl Freeze for ContentType","synthetic":true,"types":["pages::git::ContentType"]},{"text":"impl Freeze for Meta","synthetic":true,"types":["pages::meta::routes::Meta"]},{"text":"impl<'a> Freeze for BuildDetails<'a>","synthetic":true,"types":["pages::meta::BuildDetails"]},{"text":"impl Freeze for build_details","synthetic":true,"types":["pages::meta::build_details"]},{"text":"impl Freeze for Page","synthetic":true,"types":["pages::page::Page"]},{"text":"impl<'a> Freeze for Preview<'a>","synthetic":true,"types":["pages::preview::Preview"]},{"text":"impl Freeze for Routes","synthetic":true,"types":["pages::routes::Routes"]},{"text":"impl Freeze for Serve","synthetic":true,"types":["pages::serve::routes::Serve"]},{"text":"impl Freeze for index","synthetic":true,"types":["pages::serve::index"]},{"text":"impl Freeze for Server","synthetic":true,"types":["pages::settings::Server"]},{"text":"impl Freeze for Settings","synthetic":true,"types":["pages::settings::Settings"]}]; +implementors["pages"] = [{"text":"impl Freeze for Ctx","synthetic":true,"types":["pages::ctx::Ctx"]},{"text":"impl Freeze for ConnectionOptions","synthetic":true,"types":["pages::db::ConnectionOptions"]},{"text":"impl Freeze for Conn","synthetic":true,"types":["pages::db::Conn"]},{"text":"impl Freeze for Fresh","synthetic":true,"types":["pages::db::Fresh"]},{"text":"impl Freeze for Database","synthetic":true,"types":["pages::db::Database"]},{"text":"impl<'a> Freeze for Register<'a>","synthetic":true,"types":["pages::db::Register"]},{"text":"impl<'a> Freeze for UpdateEmail<'a>","synthetic":true,"types":["pages::db::UpdateEmail"]},{"text":"impl<'a> Freeze for Login<'a>","synthetic":true,"types":["pages::db::Login"]},{"text":"impl Freeze for NameHash","synthetic":true,"types":["pages::db::NameHash"]},{"text":"impl Freeze for Deploy","synthetic":true,"types":["pages::deploy::routes::Deploy"]},{"text":"impl Freeze for DeployEvent","synthetic":true,"types":["pages::deploy::DeployEvent"]},{"text":"impl Freeze for update","synthetic":true,"types":["pages::deploy::update"]},{"text":"impl Freeze for DeploySecret","synthetic":true,"types":["pages::deploy::DeploySecret"]},{"text":"impl Freeze for DeployInfo","synthetic":true,"types":["pages::deploy::DeployInfo"]},{"text":"impl Freeze for deploy_info","synthetic":true,"types":["pages::deploy::deploy_info"]},{"text":"impl Freeze for FSError","synthetic":true,"types":["pages::errors::FSError"]},{"text":"impl Freeze for ConfigError","synthetic":true,"types":["pages::errors::ConfigError"]},{"text":"impl Freeze for ServiceError","synthetic":true,"types":["pages::errors::ServiceError"]},{"text":"impl Freeze for ErrorToResponse","synthetic":true,"types":["pages::errors::ErrorToResponse"]},{"text":"impl Freeze for GitFileMode","synthetic":true,"types":["pages::git::GitFileMode"]},{"text":"impl Freeze for FileInfo","synthetic":true,"types":["pages::git::FileInfo"]},{"text":"impl Freeze for ContentType","synthetic":true,"types":["pages::git::ContentType"]},{"text":"impl Freeze for Meta","synthetic":true,"types":["pages::meta::routes::Meta"]},{"text":"impl<'a> Freeze for BuildDetails<'a>","synthetic":true,"types":["pages::meta::BuildDetails"]},{"text":"impl Freeze for build_details","synthetic":true,"types":["pages::meta::build_details"]},{"text":"impl Freeze for Page","synthetic":true,"types":["pages::page::Page"]},{"text":"impl<'a> Freeze for Preview<'a>","synthetic":true,"types":["pages::preview::Preview"]},{"text":"impl Freeze for Routes","synthetic":true,"types":["pages::routes::Routes"]},{"text":"impl Freeze for Serve","synthetic":true,"types":["pages::serve::routes::Serve"]},{"text":"impl Freeze for index","synthetic":true,"types":["pages::serve::index"]},{"text":"impl Freeze for Server","synthetic":true,"types":["pages::settings::Server"]},{"text":"impl Freeze for DBType","synthetic":true,"types":["pages::settings::DBType"]},{"text":"impl Freeze for Database","synthetic":true,"types":["pages::settings::Database"]},{"text":"impl Freeze for Settings","synthetic":true,"types":["pages::settings::Settings"]},{"text":"impl Freeze for Cli","synthetic":true,"types":["pages::Cli"]},{"text":"impl Freeze for Commands","synthetic":true,"types":["pages::Commands"]}]; if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})() \ No newline at end of file diff --git a/implementors/core/marker/trait.Send.js b/implementors/core/marker/trait.Send.js index aaf6deb..710fd75 100644 --- a/implementors/core/marker/trait.Send.js +++ b/implementors/core/marker/trait.Send.js @@ -1,3 +1,3 @@ (function() {var implementors = {}; -implementors["pages"] = [{"text":"impl Send for Ctx","synthetic":true,"types":["pages::ctx::Ctx"]},{"text":"impl Send for Deploy","synthetic":true,"types":["pages::deploy::routes::Deploy"]},{"text":"impl Send for DeployEvent","synthetic":true,"types":["pages::deploy::DeployEvent"]},{"text":"impl Send for update","synthetic":true,"types":["pages::deploy::update"]},{"text":"impl Send for DeploySecret","synthetic":true,"types":["pages::deploy::DeploySecret"]},{"text":"impl Send for DeployInfo","synthetic":true,"types":["pages::deploy::DeployInfo"]},{"text":"impl Send for deploy_info","synthetic":true,"types":["pages::deploy::deploy_info"]},{"text":"impl Send for FSError","synthetic":true,"types":["pages::errors::FSError"]},{"text":"impl Send for ConfigError","synthetic":true,"types":["pages::errors::ConfigError"]},{"text":"impl Send for ServiceError","synthetic":true,"types":["pages::errors::ServiceError"]},{"text":"impl Send for ErrorToResponse","synthetic":true,"types":["pages::errors::ErrorToResponse"]},{"text":"impl Send for GitFileMode","synthetic":true,"types":["pages::git::GitFileMode"]},{"text":"impl Send for FileInfo","synthetic":true,"types":["pages::git::FileInfo"]},{"text":"impl Send for ContentType","synthetic":true,"types":["pages::git::ContentType"]},{"text":"impl Send for Meta","synthetic":true,"types":["pages::meta::routes::Meta"]},{"text":"impl<'a> Send for BuildDetails<'a>","synthetic":true,"types":["pages::meta::BuildDetails"]},{"text":"impl Send for build_details","synthetic":true,"types":["pages::meta::build_details"]},{"text":"impl Send for Page","synthetic":true,"types":["pages::page::Page"]},{"text":"impl<'a> Send for Preview<'a>","synthetic":true,"types":["pages::preview::Preview"]},{"text":"impl Send for Routes","synthetic":true,"types":["pages::routes::Routes"]},{"text":"impl Send for Serve","synthetic":true,"types":["pages::serve::routes::Serve"]},{"text":"impl Send for index","synthetic":true,"types":["pages::serve::index"]},{"text":"impl Send for Server","synthetic":true,"types":["pages::settings::Server"]},{"text":"impl Send for Settings","synthetic":true,"types":["pages::settings::Settings"]}]; +implementors["pages"] = [{"text":"impl Send for Ctx","synthetic":true,"types":["pages::ctx::Ctx"]},{"text":"impl Send for ConnectionOptions","synthetic":true,"types":["pages::db::ConnectionOptions"]},{"text":"impl Send for Conn","synthetic":true,"types":["pages::db::Conn"]},{"text":"impl Send for Fresh","synthetic":true,"types":["pages::db::Fresh"]},{"text":"impl Send for Database","synthetic":true,"types":["pages::db::Database"]},{"text":"impl<'a> Send for Register<'a>","synthetic":true,"types":["pages::db::Register"]},{"text":"impl<'a> Send for UpdateEmail<'a>","synthetic":true,"types":["pages::db::UpdateEmail"]},{"text":"impl<'a> Send for Login<'a>","synthetic":true,"types":["pages::db::Login"]},{"text":"impl Send for NameHash","synthetic":true,"types":["pages::db::NameHash"]},{"text":"impl Send for Deploy","synthetic":true,"types":["pages::deploy::routes::Deploy"]},{"text":"impl Send for DeployEvent","synthetic":true,"types":["pages::deploy::DeployEvent"]},{"text":"impl Send for update","synthetic":true,"types":["pages::deploy::update"]},{"text":"impl Send for DeploySecret","synthetic":true,"types":["pages::deploy::DeploySecret"]},{"text":"impl Send for DeployInfo","synthetic":true,"types":["pages::deploy::DeployInfo"]},{"text":"impl Send for deploy_info","synthetic":true,"types":["pages::deploy::deploy_info"]},{"text":"impl Send for FSError","synthetic":true,"types":["pages::errors::FSError"]},{"text":"impl Send for ConfigError","synthetic":true,"types":["pages::errors::ConfigError"]},{"text":"impl Send for ServiceError","synthetic":true,"types":["pages::errors::ServiceError"]},{"text":"impl Send for ErrorToResponse","synthetic":true,"types":["pages::errors::ErrorToResponse"]},{"text":"impl Send for GitFileMode","synthetic":true,"types":["pages::git::GitFileMode"]},{"text":"impl Send for FileInfo","synthetic":true,"types":["pages::git::FileInfo"]},{"text":"impl Send for ContentType","synthetic":true,"types":["pages::git::ContentType"]},{"text":"impl Send for Meta","synthetic":true,"types":["pages::meta::routes::Meta"]},{"text":"impl<'a> Send for BuildDetails<'a>","synthetic":true,"types":["pages::meta::BuildDetails"]},{"text":"impl Send for build_details","synthetic":true,"types":["pages::meta::build_details"]},{"text":"impl Send for Page","synthetic":true,"types":["pages::page::Page"]},{"text":"impl<'a> Send for Preview<'a>","synthetic":true,"types":["pages::preview::Preview"]},{"text":"impl Send for Routes","synthetic":true,"types":["pages::routes::Routes"]},{"text":"impl Send for Serve","synthetic":true,"types":["pages::serve::routes::Serve"]},{"text":"impl Send for index","synthetic":true,"types":["pages::serve::index"]},{"text":"impl Send for Server","synthetic":true,"types":["pages::settings::Server"]},{"text":"impl Send for DBType","synthetic":true,"types":["pages::settings::DBType"]},{"text":"impl Send for Database","synthetic":true,"types":["pages::settings::Database"]},{"text":"impl Send for Settings","synthetic":true,"types":["pages::settings::Settings"]},{"text":"impl Send for Cli","synthetic":true,"types":["pages::Cli"]},{"text":"impl Send for Commands","synthetic":true,"types":["pages::Commands"]}]; if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})() \ No newline at end of file diff --git a/implementors/core/marker/trait.StructuralEq.js b/implementors/core/marker/trait.StructuralEq.js index 3e11d09..572534c 100644 --- a/implementors/core/marker/trait.StructuralEq.js +++ b/implementors/core/marker/trait.StructuralEq.js @@ -1,3 +1,3 @@ (function() {var implementors = {}; -implementors["pages"] = [{"text":"impl StructuralEq for DeploySecret","synthetic":false,"types":["pages::deploy::DeploySecret"]},{"text":"impl StructuralEq for DeployInfo","synthetic":false,"types":["pages::deploy::DeployInfo"]},{"text":"impl StructuralEq for GitFileMode","synthetic":false,"types":["pages::git::GitFileMode"]},{"text":"impl StructuralEq for FileInfo","synthetic":false,"types":["pages::git::FileInfo"]},{"text":"impl StructuralEq for ContentType","synthetic":false,"types":["pages::git::ContentType"]},{"text":"impl StructuralEq for Page","synthetic":false,"types":["pages::page::Page"]}]; +implementors["pages"] = [{"text":"impl<'a> StructuralEq for Register<'a>","synthetic":false,"types":["pages::db::Register"]},{"text":"impl<'a> StructuralEq for UpdateEmail<'a>","synthetic":false,"types":["pages::db::UpdateEmail"]},{"text":"impl<'a> StructuralEq for Login<'a>","synthetic":false,"types":["pages::db::Login"]},{"text":"impl StructuralEq for NameHash","synthetic":false,"types":["pages::db::NameHash"]},{"text":"impl StructuralEq for DeploySecret","synthetic":false,"types":["pages::deploy::DeploySecret"]},{"text":"impl StructuralEq for DeployInfo","synthetic":false,"types":["pages::deploy::DeployInfo"]},{"text":"impl StructuralEq for GitFileMode","synthetic":false,"types":["pages::git::GitFileMode"]},{"text":"impl StructuralEq for FileInfo","synthetic":false,"types":["pages::git::FileInfo"]},{"text":"impl StructuralEq for ContentType","synthetic":false,"types":["pages::git::ContentType"]},{"text":"impl StructuralEq for Page","synthetic":false,"types":["pages::page::Page"]},{"text":"impl StructuralEq for DBType","synthetic":false,"types":["pages::settings::DBType"]}]; if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})() \ No newline at end of file diff --git a/implementors/core/marker/trait.StructuralPartialEq.js b/implementors/core/marker/trait.StructuralPartialEq.js index 5d1ecca..d3d84aa 100644 --- a/implementors/core/marker/trait.StructuralPartialEq.js +++ b/implementors/core/marker/trait.StructuralPartialEq.js @@ -1,3 +1,3 @@ (function() {var implementors = {}; -implementors["pages"] = [{"text":"impl StructuralPartialEq for DeploySecret","synthetic":false,"types":["pages::deploy::DeploySecret"]},{"text":"impl StructuralPartialEq for DeployInfo","synthetic":false,"types":["pages::deploy::DeployInfo"]},{"text":"impl StructuralPartialEq for ServiceError","synthetic":false,"types":["pages::errors::ServiceError"]},{"text":"impl StructuralPartialEq for GitFileMode","synthetic":false,"types":["pages::git::GitFileMode"]},{"text":"impl StructuralPartialEq for FileInfo","synthetic":false,"types":["pages::git::FileInfo"]},{"text":"impl StructuralPartialEq for ContentType","synthetic":false,"types":["pages::git::ContentType"]},{"text":"impl StructuralPartialEq for Page","synthetic":false,"types":["pages::page::Page"]}]; +implementors["pages"] = [{"text":"impl<'a> StructuralPartialEq for Register<'a>","synthetic":false,"types":["pages::db::Register"]},{"text":"impl<'a> StructuralPartialEq for UpdateEmail<'a>","synthetic":false,"types":["pages::db::UpdateEmail"]},{"text":"impl<'a> StructuralPartialEq for Login<'a>","synthetic":false,"types":["pages::db::Login"]},{"text":"impl StructuralPartialEq for NameHash","synthetic":false,"types":["pages::db::NameHash"]},{"text":"impl StructuralPartialEq for DeploySecret","synthetic":false,"types":["pages::deploy::DeploySecret"]},{"text":"impl StructuralPartialEq for DeployInfo","synthetic":false,"types":["pages::deploy::DeployInfo"]},{"text":"impl StructuralPartialEq for ServiceError","synthetic":false,"types":["pages::errors::ServiceError"]},{"text":"impl StructuralPartialEq for GitFileMode","synthetic":false,"types":["pages::git::GitFileMode"]},{"text":"impl StructuralPartialEq for FileInfo","synthetic":false,"types":["pages::git::FileInfo"]},{"text":"impl StructuralPartialEq for ContentType","synthetic":false,"types":["pages::git::ContentType"]},{"text":"impl StructuralPartialEq for Page","synthetic":false,"types":["pages::page::Page"]},{"text":"impl StructuralPartialEq for DBType","synthetic":false,"types":["pages::settings::DBType"]}]; if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})() \ No newline at end of file diff --git a/implementors/core/marker/trait.Sync.js b/implementors/core/marker/trait.Sync.js index dffd27f..3304863 100644 --- a/implementors/core/marker/trait.Sync.js +++ b/implementors/core/marker/trait.Sync.js @@ -1,3 +1,3 @@ (function() {var implementors = {}; -implementors["pages"] = [{"text":"impl Sync for Ctx","synthetic":true,"types":["pages::ctx::Ctx"]},{"text":"impl Sync for Deploy","synthetic":true,"types":["pages::deploy::routes::Deploy"]},{"text":"impl Sync for DeployEvent","synthetic":true,"types":["pages::deploy::DeployEvent"]},{"text":"impl Sync for update","synthetic":true,"types":["pages::deploy::update"]},{"text":"impl Sync for DeploySecret","synthetic":true,"types":["pages::deploy::DeploySecret"]},{"text":"impl Sync for DeployInfo","synthetic":true,"types":["pages::deploy::DeployInfo"]},{"text":"impl Sync for deploy_info","synthetic":true,"types":["pages::deploy::deploy_info"]},{"text":"impl Sync for FSError","synthetic":true,"types":["pages::errors::FSError"]},{"text":"impl Sync for ConfigError","synthetic":true,"types":["pages::errors::ConfigError"]},{"text":"impl Sync for ServiceError","synthetic":true,"types":["pages::errors::ServiceError"]},{"text":"impl Sync for ErrorToResponse","synthetic":true,"types":["pages::errors::ErrorToResponse"]},{"text":"impl Sync for GitFileMode","synthetic":true,"types":["pages::git::GitFileMode"]},{"text":"impl Sync for FileInfo","synthetic":true,"types":["pages::git::FileInfo"]},{"text":"impl Sync for ContentType","synthetic":true,"types":["pages::git::ContentType"]},{"text":"impl Sync for Meta","synthetic":true,"types":["pages::meta::routes::Meta"]},{"text":"impl<'a> Sync for BuildDetails<'a>","synthetic":true,"types":["pages::meta::BuildDetails"]},{"text":"impl Sync for build_details","synthetic":true,"types":["pages::meta::build_details"]},{"text":"impl Sync for Page","synthetic":true,"types":["pages::page::Page"]},{"text":"impl<'a> Sync for Preview<'a>","synthetic":true,"types":["pages::preview::Preview"]},{"text":"impl Sync for Routes","synthetic":true,"types":["pages::routes::Routes"]},{"text":"impl Sync for Serve","synthetic":true,"types":["pages::serve::routes::Serve"]},{"text":"impl Sync for index","synthetic":true,"types":["pages::serve::index"]},{"text":"impl Sync for Server","synthetic":true,"types":["pages::settings::Server"]},{"text":"impl Sync for Settings","synthetic":true,"types":["pages::settings::Settings"]}]; +implementors["pages"] = [{"text":"impl Sync for Ctx","synthetic":true,"types":["pages::ctx::Ctx"]},{"text":"impl Sync for ConnectionOptions","synthetic":true,"types":["pages::db::ConnectionOptions"]},{"text":"impl Sync for Conn","synthetic":true,"types":["pages::db::Conn"]},{"text":"impl Sync for Fresh","synthetic":true,"types":["pages::db::Fresh"]},{"text":"impl Sync for Database","synthetic":true,"types":["pages::db::Database"]},{"text":"impl<'a> Sync for Register<'a>","synthetic":true,"types":["pages::db::Register"]},{"text":"impl<'a> Sync for UpdateEmail<'a>","synthetic":true,"types":["pages::db::UpdateEmail"]},{"text":"impl<'a> Sync for Login<'a>","synthetic":true,"types":["pages::db::Login"]},{"text":"impl Sync for NameHash","synthetic":true,"types":["pages::db::NameHash"]},{"text":"impl Sync for Deploy","synthetic":true,"types":["pages::deploy::routes::Deploy"]},{"text":"impl Sync for DeployEvent","synthetic":true,"types":["pages::deploy::DeployEvent"]},{"text":"impl Sync for update","synthetic":true,"types":["pages::deploy::update"]},{"text":"impl Sync for DeploySecret","synthetic":true,"types":["pages::deploy::DeploySecret"]},{"text":"impl Sync for DeployInfo","synthetic":true,"types":["pages::deploy::DeployInfo"]},{"text":"impl Sync for deploy_info","synthetic":true,"types":["pages::deploy::deploy_info"]},{"text":"impl Sync for FSError","synthetic":true,"types":["pages::errors::FSError"]},{"text":"impl Sync for ConfigError","synthetic":true,"types":["pages::errors::ConfigError"]},{"text":"impl Sync for ServiceError","synthetic":true,"types":["pages::errors::ServiceError"]},{"text":"impl Sync for ErrorToResponse","synthetic":true,"types":["pages::errors::ErrorToResponse"]},{"text":"impl Sync for GitFileMode","synthetic":true,"types":["pages::git::GitFileMode"]},{"text":"impl Sync for FileInfo","synthetic":true,"types":["pages::git::FileInfo"]},{"text":"impl Sync for ContentType","synthetic":true,"types":["pages::git::ContentType"]},{"text":"impl Sync for Meta","synthetic":true,"types":["pages::meta::routes::Meta"]},{"text":"impl<'a> Sync for BuildDetails<'a>","synthetic":true,"types":["pages::meta::BuildDetails"]},{"text":"impl Sync for build_details","synthetic":true,"types":["pages::meta::build_details"]},{"text":"impl Sync for Page","synthetic":true,"types":["pages::page::Page"]},{"text":"impl<'a> Sync for Preview<'a>","synthetic":true,"types":["pages::preview::Preview"]},{"text":"impl Sync for Routes","synthetic":true,"types":["pages::routes::Routes"]},{"text":"impl Sync for Serve","synthetic":true,"types":["pages::serve::routes::Serve"]},{"text":"impl Sync for index","synthetic":true,"types":["pages::serve::index"]},{"text":"impl Sync for Server","synthetic":true,"types":["pages::settings::Server"]},{"text":"impl Sync for DBType","synthetic":true,"types":["pages::settings::DBType"]},{"text":"impl Sync for Database","synthetic":true,"types":["pages::settings::Database"]},{"text":"impl Sync for Settings","synthetic":true,"types":["pages::settings::Settings"]},{"text":"impl Sync for Cli","synthetic":true,"types":["pages::Cli"]},{"text":"impl Sync for Commands","synthetic":true,"types":["pages::Commands"]}]; if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})() \ No newline at end of file diff --git a/implementors/core/marker/trait.Unpin.js b/implementors/core/marker/trait.Unpin.js index 20257f8..cb1229c 100644 --- a/implementors/core/marker/trait.Unpin.js +++ b/implementors/core/marker/trait.Unpin.js @@ -1,3 +1,3 @@ (function() {var implementors = {}; -implementors["pages"] = [{"text":"impl Unpin for Ctx","synthetic":true,"types":["pages::ctx::Ctx"]},{"text":"impl Unpin for Deploy","synthetic":true,"types":["pages::deploy::routes::Deploy"]},{"text":"impl Unpin for DeployEvent","synthetic":true,"types":["pages::deploy::DeployEvent"]},{"text":"impl Unpin for update","synthetic":true,"types":["pages::deploy::update"]},{"text":"impl Unpin for DeploySecret","synthetic":true,"types":["pages::deploy::DeploySecret"]},{"text":"impl Unpin for DeployInfo","synthetic":true,"types":["pages::deploy::DeployInfo"]},{"text":"impl Unpin for deploy_info","synthetic":true,"types":["pages::deploy::deploy_info"]},{"text":"impl Unpin for FSError","synthetic":true,"types":["pages::errors::FSError"]},{"text":"impl Unpin for ConfigError","synthetic":true,"types":["pages::errors::ConfigError"]},{"text":"impl Unpin for ServiceError","synthetic":true,"types":["pages::errors::ServiceError"]},{"text":"impl Unpin for ErrorToResponse","synthetic":true,"types":["pages::errors::ErrorToResponse"]},{"text":"impl Unpin for GitFileMode","synthetic":true,"types":["pages::git::GitFileMode"]},{"text":"impl Unpin for FileInfo","synthetic":true,"types":["pages::git::FileInfo"]},{"text":"impl Unpin for ContentType","synthetic":true,"types":["pages::git::ContentType"]},{"text":"impl Unpin for Meta","synthetic":true,"types":["pages::meta::routes::Meta"]},{"text":"impl<'a> Unpin for BuildDetails<'a>","synthetic":true,"types":["pages::meta::BuildDetails"]},{"text":"impl Unpin for build_details","synthetic":true,"types":["pages::meta::build_details"]},{"text":"impl Unpin for Page","synthetic":true,"types":["pages::page::Page"]},{"text":"impl<'a> Unpin for Preview<'a>","synthetic":true,"types":["pages::preview::Preview"]},{"text":"impl Unpin for Routes","synthetic":true,"types":["pages::routes::Routes"]},{"text":"impl Unpin for Serve","synthetic":true,"types":["pages::serve::routes::Serve"]},{"text":"impl Unpin for index","synthetic":true,"types":["pages::serve::index"]},{"text":"impl Unpin for Server","synthetic":true,"types":["pages::settings::Server"]},{"text":"impl Unpin for Settings","synthetic":true,"types":["pages::settings::Settings"]}]; +implementors["pages"] = [{"text":"impl Unpin for Ctx","synthetic":true,"types":["pages::ctx::Ctx"]},{"text":"impl Unpin for ConnectionOptions","synthetic":true,"types":["pages::db::ConnectionOptions"]},{"text":"impl Unpin for Conn","synthetic":true,"types":["pages::db::Conn"]},{"text":"impl Unpin for Fresh","synthetic":true,"types":["pages::db::Fresh"]},{"text":"impl Unpin for Database","synthetic":true,"types":["pages::db::Database"]},{"text":"impl<'a> Unpin for Register<'a>","synthetic":true,"types":["pages::db::Register"]},{"text":"impl<'a> Unpin for UpdateEmail<'a>","synthetic":true,"types":["pages::db::UpdateEmail"]},{"text":"impl<'a> Unpin for Login<'a>","synthetic":true,"types":["pages::db::Login"]},{"text":"impl Unpin for NameHash","synthetic":true,"types":["pages::db::NameHash"]},{"text":"impl Unpin for Deploy","synthetic":true,"types":["pages::deploy::routes::Deploy"]},{"text":"impl Unpin for DeployEvent","synthetic":true,"types":["pages::deploy::DeployEvent"]},{"text":"impl Unpin for update","synthetic":true,"types":["pages::deploy::update"]},{"text":"impl Unpin for DeploySecret","synthetic":true,"types":["pages::deploy::DeploySecret"]},{"text":"impl Unpin for DeployInfo","synthetic":true,"types":["pages::deploy::DeployInfo"]},{"text":"impl Unpin for deploy_info","synthetic":true,"types":["pages::deploy::deploy_info"]},{"text":"impl Unpin for FSError","synthetic":true,"types":["pages::errors::FSError"]},{"text":"impl Unpin for ConfigError","synthetic":true,"types":["pages::errors::ConfigError"]},{"text":"impl Unpin for ServiceError","synthetic":true,"types":["pages::errors::ServiceError"]},{"text":"impl Unpin for ErrorToResponse","synthetic":true,"types":["pages::errors::ErrorToResponse"]},{"text":"impl Unpin for GitFileMode","synthetic":true,"types":["pages::git::GitFileMode"]},{"text":"impl Unpin for FileInfo","synthetic":true,"types":["pages::git::FileInfo"]},{"text":"impl Unpin for ContentType","synthetic":true,"types":["pages::git::ContentType"]},{"text":"impl Unpin for Meta","synthetic":true,"types":["pages::meta::routes::Meta"]},{"text":"impl<'a> Unpin for BuildDetails<'a>","synthetic":true,"types":["pages::meta::BuildDetails"]},{"text":"impl Unpin for build_details","synthetic":true,"types":["pages::meta::build_details"]},{"text":"impl Unpin for Page","synthetic":true,"types":["pages::page::Page"]},{"text":"impl<'a> Unpin for Preview<'a>","synthetic":true,"types":["pages::preview::Preview"]},{"text":"impl Unpin for Routes","synthetic":true,"types":["pages::routes::Routes"]},{"text":"impl Unpin for Serve","synthetic":true,"types":["pages::serve::routes::Serve"]},{"text":"impl Unpin for index","synthetic":true,"types":["pages::serve::index"]},{"text":"impl Unpin for Server","synthetic":true,"types":["pages::settings::Server"]},{"text":"impl Unpin for DBType","synthetic":true,"types":["pages::settings::DBType"]},{"text":"impl Unpin for Database","synthetic":true,"types":["pages::settings::Database"]},{"text":"impl Unpin for Settings","synthetic":true,"types":["pages::settings::Settings"]},{"text":"impl Unpin for Cli","synthetic":true,"types":["pages::Cli"]},{"text":"impl Unpin for Commands","synthetic":true,"types":["pages::Commands"]}]; if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})() \ No newline at end of file diff --git a/implementors/core/panic/unwind_safe/trait.RefUnwindSafe.js b/implementors/core/panic/unwind_safe/trait.RefUnwindSafe.js index 6b98fcb..6f7a87f 100644 --- a/implementors/core/panic/unwind_safe/trait.RefUnwindSafe.js +++ b/implementors/core/panic/unwind_safe/trait.RefUnwindSafe.js @@ -1,3 +1,3 @@ (function() {var implementors = {}; -implementors["pages"] = [{"text":"impl RefUnwindSafe for Ctx","synthetic":true,"types":["pages::ctx::Ctx"]},{"text":"impl RefUnwindSafe for Deploy","synthetic":true,"types":["pages::deploy::routes::Deploy"]},{"text":"impl RefUnwindSafe for DeployEvent","synthetic":true,"types":["pages::deploy::DeployEvent"]},{"text":"impl RefUnwindSafe for update","synthetic":true,"types":["pages::deploy::update"]},{"text":"impl RefUnwindSafe for DeploySecret","synthetic":true,"types":["pages::deploy::DeploySecret"]},{"text":"impl RefUnwindSafe for DeployInfo","synthetic":true,"types":["pages::deploy::DeployInfo"]},{"text":"impl RefUnwindSafe for deploy_info","synthetic":true,"types":["pages::deploy::deploy_info"]},{"text":"impl !RefUnwindSafe for FSError","synthetic":true,"types":["pages::errors::FSError"]},{"text":"impl !RefUnwindSafe for ConfigError","synthetic":true,"types":["pages::errors::ConfigError"]},{"text":"impl !RefUnwindSafe for ServiceError","synthetic":true,"types":["pages::errors::ServiceError"]},{"text":"impl RefUnwindSafe for ErrorToResponse","synthetic":true,"types":["pages::errors::ErrorToResponse"]},{"text":"impl RefUnwindSafe for GitFileMode","synthetic":true,"types":["pages::git::GitFileMode"]},{"text":"impl RefUnwindSafe for FileInfo","synthetic":true,"types":["pages::git::FileInfo"]},{"text":"impl RefUnwindSafe for ContentType","synthetic":true,"types":["pages::git::ContentType"]},{"text":"impl RefUnwindSafe for Meta","synthetic":true,"types":["pages::meta::routes::Meta"]},{"text":"impl<'a> RefUnwindSafe for BuildDetails<'a>","synthetic":true,"types":["pages::meta::BuildDetails"]},{"text":"impl RefUnwindSafe for build_details","synthetic":true,"types":["pages::meta::build_details"]},{"text":"impl RefUnwindSafe for Page","synthetic":true,"types":["pages::page::Page"]},{"text":"impl<'a> RefUnwindSafe for Preview<'a>","synthetic":true,"types":["pages::preview::Preview"]},{"text":"impl RefUnwindSafe for Routes","synthetic":true,"types":["pages::routes::Routes"]},{"text":"impl RefUnwindSafe for Serve","synthetic":true,"types":["pages::serve::routes::Serve"]},{"text":"impl RefUnwindSafe for index","synthetic":true,"types":["pages::serve::index"]},{"text":"impl RefUnwindSafe for Server","synthetic":true,"types":["pages::settings::Server"]},{"text":"impl RefUnwindSafe for Settings","synthetic":true,"types":["pages::settings::Settings"]}]; +implementors["pages"] = [{"text":"impl !RefUnwindSafe for Ctx","synthetic":true,"types":["pages::ctx::Ctx"]},{"text":"impl !RefUnwindSafe for ConnectionOptions","synthetic":true,"types":["pages::db::ConnectionOptions"]},{"text":"impl !RefUnwindSafe for Conn","synthetic":true,"types":["pages::db::Conn"]},{"text":"impl !RefUnwindSafe for Fresh","synthetic":true,"types":["pages::db::Fresh"]},{"text":"impl !RefUnwindSafe for Database","synthetic":true,"types":["pages::db::Database"]},{"text":"impl<'a> RefUnwindSafe for Register<'a>","synthetic":true,"types":["pages::db::Register"]},{"text":"impl<'a> RefUnwindSafe for UpdateEmail<'a>","synthetic":true,"types":["pages::db::UpdateEmail"]},{"text":"impl<'a> RefUnwindSafe for Login<'a>","synthetic":true,"types":["pages::db::Login"]},{"text":"impl RefUnwindSafe for NameHash","synthetic":true,"types":["pages::db::NameHash"]},{"text":"impl RefUnwindSafe for Deploy","synthetic":true,"types":["pages::deploy::routes::Deploy"]},{"text":"impl RefUnwindSafe for DeployEvent","synthetic":true,"types":["pages::deploy::DeployEvent"]},{"text":"impl RefUnwindSafe for update","synthetic":true,"types":["pages::deploy::update"]},{"text":"impl RefUnwindSafe for DeploySecret","synthetic":true,"types":["pages::deploy::DeploySecret"]},{"text":"impl RefUnwindSafe for DeployInfo","synthetic":true,"types":["pages::deploy::DeployInfo"]},{"text":"impl RefUnwindSafe for deploy_info","synthetic":true,"types":["pages::deploy::deploy_info"]},{"text":"impl !RefUnwindSafe for FSError","synthetic":true,"types":["pages::errors::FSError"]},{"text":"impl !RefUnwindSafe for ConfigError","synthetic":true,"types":["pages::errors::ConfigError"]},{"text":"impl !RefUnwindSafe for ServiceError","synthetic":true,"types":["pages::errors::ServiceError"]},{"text":"impl RefUnwindSafe for ErrorToResponse","synthetic":true,"types":["pages::errors::ErrorToResponse"]},{"text":"impl RefUnwindSafe for GitFileMode","synthetic":true,"types":["pages::git::GitFileMode"]},{"text":"impl RefUnwindSafe for FileInfo","synthetic":true,"types":["pages::git::FileInfo"]},{"text":"impl RefUnwindSafe for ContentType","synthetic":true,"types":["pages::git::ContentType"]},{"text":"impl RefUnwindSafe for Meta","synthetic":true,"types":["pages::meta::routes::Meta"]},{"text":"impl<'a> RefUnwindSafe for BuildDetails<'a>","synthetic":true,"types":["pages::meta::BuildDetails"]},{"text":"impl RefUnwindSafe for build_details","synthetic":true,"types":["pages::meta::build_details"]},{"text":"impl RefUnwindSafe for Page","synthetic":true,"types":["pages::page::Page"]},{"text":"impl<'a> RefUnwindSafe for Preview<'a>","synthetic":true,"types":["pages::preview::Preview"]},{"text":"impl RefUnwindSafe for Routes","synthetic":true,"types":["pages::routes::Routes"]},{"text":"impl RefUnwindSafe for Serve","synthetic":true,"types":["pages::serve::routes::Serve"]},{"text":"impl RefUnwindSafe for index","synthetic":true,"types":["pages::serve::index"]},{"text":"impl RefUnwindSafe for Server","synthetic":true,"types":["pages::settings::Server"]},{"text":"impl RefUnwindSafe for DBType","synthetic":true,"types":["pages::settings::DBType"]},{"text":"impl RefUnwindSafe for Database","synthetic":true,"types":["pages::settings::Database"]},{"text":"impl RefUnwindSafe for Settings","synthetic":true,"types":["pages::settings::Settings"]},{"text":"impl RefUnwindSafe for Cli","synthetic":true,"types":["pages::Cli"]},{"text":"impl RefUnwindSafe for Commands","synthetic":true,"types":["pages::Commands"]}]; if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})() \ No newline at end of file diff --git a/implementors/core/panic/unwind_safe/trait.UnwindSafe.js b/implementors/core/panic/unwind_safe/trait.UnwindSafe.js index 3def12d..f74fbb1 100644 --- a/implementors/core/panic/unwind_safe/trait.UnwindSafe.js +++ b/implementors/core/panic/unwind_safe/trait.UnwindSafe.js @@ -1,3 +1,3 @@ (function() {var implementors = {}; -implementors["pages"] = [{"text":"impl UnwindSafe for Ctx","synthetic":true,"types":["pages::ctx::Ctx"]},{"text":"impl UnwindSafe for Deploy","synthetic":true,"types":["pages::deploy::routes::Deploy"]},{"text":"impl UnwindSafe for DeployEvent","synthetic":true,"types":["pages::deploy::DeployEvent"]},{"text":"impl UnwindSafe for update","synthetic":true,"types":["pages::deploy::update"]},{"text":"impl UnwindSafe for DeploySecret","synthetic":true,"types":["pages::deploy::DeploySecret"]},{"text":"impl UnwindSafe for DeployInfo","synthetic":true,"types":["pages::deploy::DeployInfo"]},{"text":"impl UnwindSafe for deploy_info","synthetic":true,"types":["pages::deploy::deploy_info"]},{"text":"impl !UnwindSafe for FSError","synthetic":true,"types":["pages::errors::FSError"]},{"text":"impl !UnwindSafe for ConfigError","synthetic":true,"types":["pages::errors::ConfigError"]},{"text":"impl !UnwindSafe for ServiceError","synthetic":true,"types":["pages::errors::ServiceError"]},{"text":"impl UnwindSafe for ErrorToResponse","synthetic":true,"types":["pages::errors::ErrorToResponse"]},{"text":"impl UnwindSafe for GitFileMode","synthetic":true,"types":["pages::git::GitFileMode"]},{"text":"impl UnwindSafe for FileInfo","synthetic":true,"types":["pages::git::FileInfo"]},{"text":"impl UnwindSafe for ContentType","synthetic":true,"types":["pages::git::ContentType"]},{"text":"impl UnwindSafe for Meta","synthetic":true,"types":["pages::meta::routes::Meta"]},{"text":"impl<'a> UnwindSafe for BuildDetails<'a>","synthetic":true,"types":["pages::meta::BuildDetails"]},{"text":"impl UnwindSafe for build_details","synthetic":true,"types":["pages::meta::build_details"]},{"text":"impl UnwindSafe for Page","synthetic":true,"types":["pages::page::Page"]},{"text":"impl<'a> UnwindSafe for Preview<'a>","synthetic":true,"types":["pages::preview::Preview"]},{"text":"impl UnwindSafe for Routes","synthetic":true,"types":["pages::routes::Routes"]},{"text":"impl UnwindSafe for Serve","synthetic":true,"types":["pages::serve::routes::Serve"]},{"text":"impl UnwindSafe for index","synthetic":true,"types":["pages::serve::index"]},{"text":"impl UnwindSafe for Server","synthetic":true,"types":["pages::settings::Server"]},{"text":"impl UnwindSafe for Settings","synthetic":true,"types":["pages::settings::Settings"]}]; +implementors["pages"] = [{"text":"impl !UnwindSafe for Ctx","synthetic":true,"types":["pages::ctx::Ctx"]},{"text":"impl !UnwindSafe for ConnectionOptions","synthetic":true,"types":["pages::db::ConnectionOptions"]},{"text":"impl !UnwindSafe for Conn","synthetic":true,"types":["pages::db::Conn"]},{"text":"impl !UnwindSafe for Fresh","synthetic":true,"types":["pages::db::Fresh"]},{"text":"impl !UnwindSafe for Database","synthetic":true,"types":["pages::db::Database"]},{"text":"impl<'a> UnwindSafe for Register<'a>","synthetic":true,"types":["pages::db::Register"]},{"text":"impl<'a> UnwindSafe for UpdateEmail<'a>","synthetic":true,"types":["pages::db::UpdateEmail"]},{"text":"impl<'a> UnwindSafe for Login<'a>","synthetic":true,"types":["pages::db::Login"]},{"text":"impl UnwindSafe for NameHash","synthetic":true,"types":["pages::db::NameHash"]},{"text":"impl UnwindSafe for Deploy","synthetic":true,"types":["pages::deploy::routes::Deploy"]},{"text":"impl UnwindSafe for DeployEvent","synthetic":true,"types":["pages::deploy::DeployEvent"]},{"text":"impl UnwindSafe for update","synthetic":true,"types":["pages::deploy::update"]},{"text":"impl UnwindSafe for DeploySecret","synthetic":true,"types":["pages::deploy::DeploySecret"]},{"text":"impl UnwindSafe for DeployInfo","synthetic":true,"types":["pages::deploy::DeployInfo"]},{"text":"impl UnwindSafe for deploy_info","synthetic":true,"types":["pages::deploy::deploy_info"]},{"text":"impl !UnwindSafe for FSError","synthetic":true,"types":["pages::errors::FSError"]},{"text":"impl !UnwindSafe for ConfigError","synthetic":true,"types":["pages::errors::ConfigError"]},{"text":"impl !UnwindSafe for ServiceError","synthetic":true,"types":["pages::errors::ServiceError"]},{"text":"impl UnwindSafe for ErrorToResponse","synthetic":true,"types":["pages::errors::ErrorToResponse"]},{"text":"impl UnwindSafe for GitFileMode","synthetic":true,"types":["pages::git::GitFileMode"]},{"text":"impl UnwindSafe for FileInfo","synthetic":true,"types":["pages::git::FileInfo"]},{"text":"impl UnwindSafe for ContentType","synthetic":true,"types":["pages::git::ContentType"]},{"text":"impl UnwindSafe for Meta","synthetic":true,"types":["pages::meta::routes::Meta"]},{"text":"impl<'a> UnwindSafe for BuildDetails<'a>","synthetic":true,"types":["pages::meta::BuildDetails"]},{"text":"impl UnwindSafe for build_details","synthetic":true,"types":["pages::meta::build_details"]},{"text":"impl UnwindSafe for Page","synthetic":true,"types":["pages::page::Page"]},{"text":"impl<'a> UnwindSafe for Preview<'a>","synthetic":true,"types":["pages::preview::Preview"]},{"text":"impl UnwindSafe for Routes","synthetic":true,"types":["pages::routes::Routes"]},{"text":"impl UnwindSafe for Serve","synthetic":true,"types":["pages::serve::routes::Serve"]},{"text":"impl UnwindSafe for index","synthetic":true,"types":["pages::serve::index"]},{"text":"impl UnwindSafe for Server","synthetic":true,"types":["pages::settings::Server"]},{"text":"impl UnwindSafe for DBType","synthetic":true,"types":["pages::settings::DBType"]},{"text":"impl UnwindSafe for Database","synthetic":true,"types":["pages::settings::Database"]},{"text":"impl UnwindSafe for Settings","synthetic":true,"types":["pages::settings::Settings"]},{"text":"impl UnwindSafe for Cli","synthetic":true,"types":["pages::Cli"]},{"text":"impl UnwindSafe for Commands","synthetic":true,"types":["pages::Commands"]}]; if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})() \ No newline at end of file diff --git a/implementors/serde/de/trait.Deserialize.js b/implementors/serde/de/trait.Deserialize.js index 6f489fd..2133356 100644 --- a/implementors/serde/de/trait.Deserialize.js +++ b/implementors/serde/de/trait.Deserialize.js @@ -1,3 +1,3 @@ (function() {var implementors = {}; -implementors["pages"] = [{"text":"impl<'de> Deserialize<'de> for DeployEvent","synthetic":false,"types":["pages::deploy::DeployEvent"]},{"text":"impl<'de> Deserialize<'de> for DeploySecret","synthetic":false,"types":["pages::deploy::DeploySecret"]},{"text":"impl<'de> Deserialize<'de> for DeployInfo","synthetic":false,"types":["pages::deploy::DeployInfo"]},{"text":"impl<'de> Deserialize<'de> for ErrorToResponse","synthetic":false,"types":["pages::errors::ErrorToResponse"]},{"text":"impl<'de> Deserialize<'de> for ContentType","synthetic":false,"types":["pages::git::ContentType"]},{"text":"impl<'de: 'a, 'a> Deserialize<'de> for BuildDetails<'a>","synthetic":false,"types":["pages::meta::BuildDetails"]},{"text":"impl<'de> Deserialize<'de> for Page","synthetic":false,"types":["pages::page::Page"]},{"text":"impl<'de> Deserialize<'de> for Server","synthetic":false,"types":["pages::settings::Server"]},{"text":"impl<'de> Deserialize<'de> for Settings","synthetic":false,"types":["pages::settings::Settings"]}]; +implementors["pages"] = [{"text":"impl<'de: 'a, 'a> Deserialize<'de> for Register<'a>","synthetic":false,"types":["pages::db::Register"]},{"text":"impl<'de: 'a, 'a> Deserialize<'de> for UpdateEmail<'a>","synthetic":false,"types":["pages::db::UpdateEmail"]},{"text":"impl<'de: 'a, 'a> Deserialize<'de> for Login<'a>","synthetic":false,"types":["pages::db::Login"]},{"text":"impl<'de> Deserialize<'de> for NameHash","synthetic":false,"types":["pages::db::NameHash"]},{"text":"impl<'de> Deserialize<'de> for DeployEvent","synthetic":false,"types":["pages::deploy::DeployEvent"]},{"text":"impl<'de> Deserialize<'de> for DeploySecret","synthetic":false,"types":["pages::deploy::DeploySecret"]},{"text":"impl<'de> Deserialize<'de> for DeployInfo","synthetic":false,"types":["pages::deploy::DeployInfo"]},{"text":"impl<'de> Deserialize<'de> for ErrorToResponse","synthetic":false,"types":["pages::errors::ErrorToResponse"]},{"text":"impl<'de> Deserialize<'de> for ContentType","synthetic":false,"types":["pages::git::ContentType"]},{"text":"impl<'de: 'a, 'a> Deserialize<'de> for BuildDetails<'a>","synthetic":false,"types":["pages::meta::BuildDetails"]},{"text":"impl<'de> Deserialize<'de> for Page","synthetic":false,"types":["pages::page::Page"]},{"text":"impl<'de> Deserialize<'de> for Server","synthetic":false,"types":["pages::settings::Server"]},{"text":"impl<'de> Deserialize<'de> for DBType","synthetic":false,"types":["pages::settings::DBType"]},{"text":"impl<'de> Deserialize<'de> for Database","synthetic":false,"types":["pages::settings::Database"]},{"text":"impl<'de> Deserialize<'de> for Settings","synthetic":false,"types":["pages::settings::Settings"]}]; if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})() \ No newline at end of file diff --git a/implementors/serde/ser/trait.Serialize.js b/implementors/serde/ser/trait.Serialize.js index c0db80a..70b096c 100644 --- a/implementors/serde/ser/trait.Serialize.js +++ b/implementors/serde/ser/trait.Serialize.js @@ -1,3 +1,3 @@ (function() {var implementors = {}; -implementors["pages"] = [{"text":"impl Serialize for DeployEvent","synthetic":false,"types":["pages::deploy::DeployEvent"]},{"text":"impl Serialize for DeploySecret","synthetic":false,"types":["pages::deploy::DeploySecret"]},{"text":"impl Serialize for DeployInfo","synthetic":false,"types":["pages::deploy::DeployInfo"]},{"text":"impl Serialize for ErrorToResponse","synthetic":false,"types":["pages::errors::ErrorToResponse"]},{"text":"impl Serialize for ContentType","synthetic":false,"types":["pages::git::ContentType"]},{"text":"impl<'a> Serialize for BuildDetails<'a>","synthetic":false,"types":["pages::meta::BuildDetails"]}]; +implementors["pages"] = [{"text":"impl<'a> Serialize for Register<'a>","synthetic":false,"types":["pages::db::Register"]},{"text":"impl<'a> Serialize for UpdateEmail<'a>","synthetic":false,"types":["pages::db::UpdateEmail"]},{"text":"impl<'a> Serialize for Login<'a>","synthetic":false,"types":["pages::db::Login"]},{"text":"impl Serialize for NameHash","synthetic":false,"types":["pages::db::NameHash"]},{"text":"impl Serialize for DeployEvent","synthetic":false,"types":["pages::deploy::DeployEvent"]},{"text":"impl Serialize for DeploySecret","synthetic":false,"types":["pages::deploy::DeploySecret"]},{"text":"impl Serialize for DeployInfo","synthetic":false,"types":["pages::deploy::DeployInfo"]},{"text":"impl Serialize for ErrorToResponse","synthetic":false,"types":["pages::errors::ErrorToResponse"]},{"text":"impl Serialize for ContentType","synthetic":false,"types":["pages::git::ContentType"]},{"text":"impl<'a> Serialize for BuildDetails<'a>","synthetic":false,"types":["pages::meta::BuildDetails"]},{"text":"impl Serialize for DBType","synthetic":false,"types":["pages::settings::DBType"]}]; if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})() \ No newline at end of file diff --git a/pages/all.html b/pages/all.html index b4f99e9..5ff37c9 100644 --- a/pages/all.html +++ b/pages/all.html @@ -4,5 +4,5 @@

List of all items

Structs

Enums

Functions

Typedefs

Constants

+

List of all items

Structs

Enums

Functions

Typedefs

Constants

\ No newline at end of file diff --git a/pages/constant.CACHE_AGE.html b/pages/constant.CACHE_AGE.html index 7974c19..194676e 100644 --- a/pages/constant.CACHE_AGE.html +++ b/pages/constant.CACHE_AGE.html @@ -5,5 +5,5 @@
-

Constant pages::CACHE_AGE

source · []
pub const CACHE_AGE: u32 = 604800;
+

Constant pages::CACHE_AGE

source · []
pub const CACHE_AGE: u32 = 604800;
\ No newline at end of file diff --git a/pages/constant.GIT_COMMIT_HASH.html b/pages/constant.GIT_COMMIT_HASH.html index f921b6e..42df1f2 100644 --- a/pages/constant.GIT_COMMIT_HASH.html +++ b/pages/constant.GIT_COMMIT_HASH.html @@ -5,5 +5,5 @@
pub const GIT_COMMIT_HASH: &str = "d6fc9ad67f5171479eec36d02edf8b18880b8ece";
+

Constant pages::GIT_COMMIT_HASH

source · []
pub const GIT_COMMIT_HASH: &str = "f3fe356a882c8341997e49b8b1300f838ba9984d";
\ No newline at end of file diff --git a/pages/constant.PKG_DESCRIPTION.html b/pages/constant.PKG_DESCRIPTION.html index 363b2c4..8ece11f 100644 --- a/pages/constant.PKG_DESCRIPTION.html +++ b/pages/constant.PKG_DESCRIPTION.html @@ -5,5 +5,5 @@
pub const PKG_DESCRIPTION: &str = "";
+

Constant pages::PKG_DESCRIPTION

source · []
pub const PKG_DESCRIPTION: &str = "";
\ No newline at end of file diff --git a/pages/constant.PKG_HOMEPAGE.html b/pages/constant.PKG_HOMEPAGE.html index 4f4e392..1b197c2 100644 --- a/pages/constant.PKG_HOMEPAGE.html +++ b/pages/constant.PKG_HOMEPAGE.html @@ -5,5 +5,5 @@
-

Constant pages::PKG_HOMEPAGE

source · []
pub const PKG_HOMEPAGE: &str = "https://github.com/realaravinth/pages";
+

Constant pages::PKG_HOMEPAGE

source · []
pub const PKG_HOMEPAGE: &str = "https://github.com/realaravinth/pages";
\ No newline at end of file diff --git a/pages/constant.PKG_NAME.html b/pages/constant.PKG_NAME.html index ca5e20a..fb555df 100644 --- a/pages/constant.PKG_NAME.html +++ b/pages/constant.PKG_NAME.html @@ -5,5 +5,5 @@
-

Constant pages::PKG_NAME

source · []
pub const PKG_NAME: &str = "pages";
+

Constant pages::PKG_NAME

source · []
pub const PKG_NAME: &str = "pages";
\ No newline at end of file diff --git a/pages/constant.VERSION.html b/pages/constant.VERSION.html index 3974d50..58a4168 100644 --- a/pages/constant.VERSION.html +++ b/pages/constant.VERSION.html @@ -5,5 +5,5 @@
-

Constant pages::VERSION

source · []
pub const VERSION: &str = "0.1.0";
+

Constant pages::VERSION

source · []
pub const VERSION: &str = "0.1.0";
\ No newline at end of file diff --git a/pages/ctx/index.html b/pages/ctx/index.html index 12ae44f..26efc32 100644 --- a/pages/ctx/index.html +++ b/pages/ctx/index.html @@ -2,9 +2,10 @@

Structs

+

Type Definitions

+
\ No newline at end of file diff --git a/pages/ctx/sidebar-items.js b/pages/ctx/sidebar-items.js index e9905cb..771b111 100644 --- a/pages/ctx/sidebar-items.js +++ b/pages/ctx/sidebar-items.js @@ -1 +1 @@ -window.SIDEBAR_ITEMS = {"struct":[["Ctx",""]]}; \ No newline at end of file +window.SIDEBAR_ITEMS = {"struct":[["Ctx",""]],"type":[["ArcCtx",""]]}; \ No newline at end of file diff --git a/pages/ctx/struct.Ctx.html b/pages/ctx/struct.Ctx.html index 6ecc183..1966030 100644 --- a/pages/ctx/struct.Ctx.html +++ b/pages/ctx/struct.Ctx.html @@ -2,14 +2,15 @@

-

Struct pages::ctx::Ctx

source · []
pub struct Ctx {
+    

Struct pages::ctx::Ctx

source · []
pub struct Ctx {
     pub settings: Settings,
-}

Fields

settings: Settings

Implementations

Trait Implementations

Returns a copy of the value. Read more

+ pub db: Database, +}

Fields

settings: Settingsdb: Database

Implementations

Trait Implementations

Returns a copy of the value. Read more

Performs copy-assignment from source. Read more

-

Auto Trait Implementations

Blanket Implementations

Gets the TypeId of self. Read more

+

Auto Trait Implementations

Blanket Implementations

Gets the TypeId of self. Read more

Immutably borrows from an owned value. Read more

Mutably borrows from an owned value. Read more

Returns the argument unchanged.

diff --git a/pages/ctx/type.ArcCtx.html b/pages/ctx/type.ArcCtx.html new file mode 100644 index 0000000..895bb3c --- /dev/null +++ b/pages/ctx/type.ArcCtx.html @@ -0,0 +1,9 @@ +ArcCtx in pages::ctx - Rust +
+

Type Definition pages::ctx::ArcCtx

source · []
pub type ArcCtx = Arc<Ctx>;
+ \ No newline at end of file diff --git a/pages/db/enum.ConnectionOptions.html b/pages/db/enum.ConnectionOptions.html new file mode 100644 index 0000000..e184794 --- /dev/null +++ b/pages/db/enum.ConnectionOptions.html @@ -0,0 +1,35 @@ +ConnectionOptions in pages::db - Rust +
pub enum ConnectionOptions {
+    Fresh(Fresh),
+    Existing(Conn),
+}
Expand description

Connect to databse

+

Variants

Fresh(Fresh)

fresh connection

+

Existing(Conn)

existing connection

+

Implementations

Auto Trait Implementations

Blanket Implementations

Gets the TypeId of self. Read more

+

Immutably borrows from an owned value. Read more

+

Mutably borrows from an owned value. Read more

+

Returns the argument unchanged.

+

Instruments this type with the provided Span, returning an +Instrumented wrapper. Read more

+

Instruments this type with the current Span, returning an +Instrumented wrapper. Read more

+

Calls U::from(self).

+

That is, this conversion is whatever the implementation of +From<T> for U chooses to do.

+

Should always be Self

+

The type returned in the event of a conversion error.

+

Performs the conversion.

+

The type returned in the event of a conversion error.

+

Performs the conversion.

+

Attaches the provided Subscriber to this type, returning a +WithDispatch wrapper. Read more

+

Attaches the current default Subscriber to this type, returning a +WithDispatch wrapper. Read more

+
+ \ No newline at end of file diff --git a/pages/db/enum.Login.html b/pages/db/enum.Login.html new file mode 100644 index 0000000..157a4eb --- /dev/null +++ b/pages/db/enum.Login.html @@ -0,0 +1,47 @@ +Login in pages::db - Rust +
+

Enum pages::db::Login

source · []
pub enum Login<'a> {
+    Username(&'a str),
+    Email(&'a str),
+}
Expand description

types of credentials used as identifiers during login

+

Variants

Username(&'a str)

username as login

+

Email(&'a str)

email as login

+

Trait Implementations

Returns a copy of the value. Read more

+

Performs copy-assignment from source. Read more

+

Formats the value using the given formatter. Read more

+

Deserialize this value from the given Serde deserializer. Read more

+

This method tests for self and other values to be equal, and is used +by ==. Read more

+

This method tests for !=.

+

Serialize this value into the given Serde serializer. Read more

+

Auto Trait Implementations

Blanket Implementations

Gets the TypeId of self. Read more

+

Immutably borrows from an owned value. Read more

+

Mutably borrows from an owned value. Read more

+

Compare self to key and return true if they are equal.

+

Returns the argument unchanged.

+

Instruments this type with the provided Span, returning an +Instrumented wrapper. Read more

+

Instruments this type with the current Span, returning an +Instrumented wrapper. Read more

+

Calls U::from(self).

+

That is, this conversion is whatever the implementation of +From<T> for U chooses to do.

+

Should always be Self

+

The resulting type after obtaining ownership.

+

Creates owned data from borrowed data, usually by cloning. Read more

+

Uses borrowed data to replace owned data, usually by cloning. Read more

+

The type returned in the event of a conversion error.

+

Performs the conversion.

+

The type returned in the event of a conversion error.

+

Performs the conversion.

+

Attaches the provided Subscriber to this type, returning a +WithDispatch wrapper. Read more

+

Attaches the current default Subscriber to this type, returning a +WithDispatch wrapper. Read more

+
+ \ No newline at end of file diff --git a/pages/db/fn.get_db.html b/pages/db/fn.get_db.html new file mode 100644 index 0000000..27d85a2 --- /dev/null +++ b/pages/db/fn.get_db.html @@ -0,0 +1,9 @@ +get_db in pages::db - Rust +
+

Function pages::db::get_db

source · []
pub async fn get_db(settings: &Settings) -> Database
+ \ No newline at end of file diff --git a/pages/db/fn.map_register_err.html b/pages/db/fn.map_register_err.html new file mode 100644 index 0000000..30a1c06 --- /dev/null +++ b/pages/db/fn.map_register_err.html @@ -0,0 +1,10 @@ +map_register_err in pages::db - Rust +
fn map_register_err(e: Error) -> ServiceError
Expand description

map postgres errors to ServiceError types

+
+ \ No newline at end of file diff --git a/pages/db/fn.map_row_not_found_err.html b/pages/db/fn.map_row_not_found_err.html new file mode 100644 index 0000000..438c97f --- /dev/null +++ b/pages/db/fn.map_row_not_found_err.html @@ -0,0 +1,10 @@ +map_row_not_found_err in pages::db - Rust +
pub fn map_row_not_found_err(
    e: Error,
    row_not_found: ServiceError
) -> ServiceError
Expand description

map custom row not found error to DB error

+
+ \ No newline at end of file diff --git a/pages/db/fn.now_unix_time_stamp.html b/pages/db/fn.now_unix_time_stamp.html new file mode 100644 index 0000000..ddcb2b6 --- /dev/null +++ b/pages/db/fn.now_unix_time_stamp.html @@ -0,0 +1,9 @@ +now_unix_time_stamp in pages::db - Rust +
fn now_unix_time_stamp() -> OffsetDateTime
+ \ No newline at end of file diff --git a/pages/db/index.html b/pages/db/index.html new file mode 100644 index 0000000..3f37883 --- /dev/null +++ b/pages/db/index.html @@ -0,0 +1,20 @@ +pages::db - Rust +
+

Module pages::db

source · []

Structs

+

Use an existing database pool

+

type encapsulating username and hashed password of a user

+

Data required to register a new user

+

data required to update them email of a user

+

Enums

+

Connect to databse

+

types of credentials used as identifiers during login

+

Functions

+
map_register_err ðŸ”’

map postgres errors to ServiceError types

+

map custom row not found error to DB error

+
now_unix_time_stamp ðŸ”’
+ \ No newline at end of file diff --git a/pages/db/sidebar-items.js b/pages/db/sidebar-items.js new file mode 100644 index 0000000..c6b9a90 --- /dev/null +++ b/pages/db/sidebar-items.js @@ -0,0 +1 @@ +window.SIDEBAR_ITEMS = {"enum":[["ConnectionOptions","Connect to databse"],["Login","types of credentials used as identifiers during login"]],"fn":[["get_db",""],["map_register_err","map postgres errors to ServiceError types"],["map_row_not_found_err","map custom row not found error to DB error"],["now_unix_time_stamp",""]],"struct":[["Conn","Use an existing database pool"],["Database",""],["Fresh",""],["NameHash","type encapsulating username and hashed password of a user"],["Register","Data required to register a new user"],["UpdateEmail","data required to update them email of a user"]]}; \ No newline at end of file diff --git a/pages/db/struct.Conn.html b/pages/db/struct.Conn.html new file mode 100644 index 0000000..cd78a02 --- /dev/null +++ b/pages/db/struct.Conn.html @@ -0,0 +1,30 @@ +Conn in pages::db - Rust +
+

Struct pages::db::Conn

source · []
pub struct Conn(pub PgPool);
Expand description

Use an existing database pool

+

Tuple Fields

0: PgPool

Auto Trait Implementations

Blanket Implementations

Gets the TypeId of self. Read more

+

Immutably borrows from an owned value. Read more

+

Mutably borrows from an owned value. Read more

+

Returns the argument unchanged.

+

Instruments this type with the provided Span, returning an +Instrumented wrapper. Read more

+

Instruments this type with the current Span, returning an +Instrumented wrapper. Read more

+

Calls U::from(self).

+

That is, this conversion is whatever the implementation of +From<T> for U chooses to do.

+

Should always be Self

+

The type returned in the event of a conversion error.

+

Performs the conversion.

+

The type returned in the event of a conversion error.

+

Performs the conversion.

+

Attaches the provided Subscriber to this type, returning a +WithDispatch wrapper. Read more

+

Attaches the current default Subscriber to this type, returning a +WithDispatch wrapper. Read more

+
+ \ No newline at end of file diff --git a/pages/db/struct.Database.html b/pages/db/struct.Database.html new file mode 100644 index 0000000..2d4ec01 --- /dev/null +++ b/pages/db/struct.Database.html @@ -0,0 +1,45 @@ +Database in pages::db - Rust +
+

Struct pages::db::Database

source · []
pub struct Database {
+    pub pool: PgPool,
+}

Fields

pool: PgPool

Implementations

register a new user

+

delete a user

+

check if username exists

+

get user email

+

check if email exists

+

update a user’s email

+

get a user’s password

+

update user’s password

+

update username

+

Trait Implementations

Returns a copy of the value. Read more

+

Performs copy-assignment from source. Read more

+

Auto Trait Implementations

Blanket Implementations

Gets the TypeId of self. Read more

+

Immutably borrows from an owned value. Read more

+

Mutably borrows from an owned value. Read more

+

Returns the argument unchanged.

+

Instruments this type with the provided Span, returning an +Instrumented wrapper. Read more

+

Instruments this type with the current Span, returning an +Instrumented wrapper. Read more

+

Calls U::from(self).

+

That is, this conversion is whatever the implementation of +From<T> for U chooses to do.

+

Should always be Self

+

The resulting type after obtaining ownership.

+

Creates owned data from borrowed data, usually by cloning. Read more

+

Uses borrowed data to replace owned data, usually by cloning. Read more

+

The type returned in the event of a conversion error.

+

Performs the conversion.

+

The type returned in the event of a conversion error.

+

Performs the conversion.

+

Attaches the provided Subscriber to this type, returning a +WithDispatch wrapper. Read more

+

Attaches the current default Subscriber to this type, returning a +WithDispatch wrapper. Read more

+
+ \ No newline at end of file diff --git a/pages/db/struct.Fresh.html b/pages/db/struct.Fresh.html new file mode 100644 index 0000000..7e76777 --- /dev/null +++ b/pages/db/struct.Fresh.html @@ -0,0 +1,33 @@ +Fresh in pages::db - Rust +
+

Struct pages::db::Fresh

source · []
pub struct Fresh {
+    pub pool_options: PgPoolOptions,
+    pub disable_logging: bool,
+    pub url: String,
+}

Fields

pool_options: PgPoolOptionsdisable_logging: boolurl: String

Auto Trait Implementations

Blanket Implementations

Gets the TypeId of self. Read more

+

Immutably borrows from an owned value. Read more

+

Mutably borrows from an owned value. Read more

+

Returns the argument unchanged.

+

Instruments this type with the provided Span, returning an +Instrumented wrapper. Read more

+

Instruments this type with the current Span, returning an +Instrumented wrapper. Read more

+

Calls U::from(self).

+

That is, this conversion is whatever the implementation of +From<T> for U chooses to do.

+

Should always be Self

+

The type returned in the event of a conversion error.

+

Performs the conversion.

+

The type returned in the event of a conversion error.

+

Performs the conversion.

+

Attaches the provided Subscriber to this type, returning a +WithDispatch wrapper. Read more

+

Attaches the current default Subscriber to this type, returning a +WithDispatch wrapper. Read more

+
+ \ No newline at end of file diff --git a/pages/db/struct.NameHash.html b/pages/db/struct.NameHash.html new file mode 100644 index 0000000..b32ff81 --- /dev/null +++ b/pages/db/struct.NameHash.html @@ -0,0 +1,47 @@ +NameHash in pages::db - Rust +
+

Struct pages::db::NameHash

source · []
pub struct NameHash {
+    pub username: String,
+    pub hash: String,
+}
Expand description

type encapsulating username and hashed password of a user

+

Fields

username: String

username

+
hash: String

hashed password

+

Trait Implementations

Returns a copy of the value. Read more

+

Performs copy-assignment from source. Read more

+

Formats the value using the given formatter. Read more

+

Deserialize this value from the given Serde deserializer. Read more

+

This method tests for self and other values to be equal, and is used +by ==. Read more

+

This method tests for !=.

+

Serialize this value into the given Serde serializer. Read more

+

Auto Trait Implementations

Blanket Implementations

Gets the TypeId of self. Read more

+

Immutably borrows from an owned value. Read more

+

Mutably borrows from an owned value. Read more

+

Compare self to key and return true if they are equal.

+

Returns the argument unchanged.

+

Instruments this type with the provided Span, returning an +Instrumented wrapper. Read more

+

Instruments this type with the current Span, returning an +Instrumented wrapper. Read more

+

Calls U::from(self).

+

That is, this conversion is whatever the implementation of +From<T> for U chooses to do.

+

Should always be Self

+

The resulting type after obtaining ownership.

+

Creates owned data from borrowed data, usually by cloning. Read more

+

Uses borrowed data to replace owned data, usually by cloning. Read more

+

The type returned in the event of a conversion error.

+

Performs the conversion.

+

The type returned in the event of a conversion error.

+

Performs the conversion.

+

Attaches the provided Subscriber to this type, returning a +WithDispatch wrapper. Read more

+

Attaches the current default Subscriber to this type, returning a +WithDispatch wrapper. Read more

+
+ \ No newline at end of file diff --git a/pages/db/struct.Register.html b/pages/db/struct.Register.html new file mode 100644 index 0000000..c88ba01 --- /dev/null +++ b/pages/db/struct.Register.html @@ -0,0 +1,49 @@ +Register in pages::db - Rust +
+

Struct pages::db::Register

source · []
pub struct Register<'a> {
+    pub username: &'a str,
+    pub hash: &'a str,
+    pub email: &'a str,
+}
Expand description

Data required to register a new user

+

Fields

username: &'a str

username of new user

+
hash: &'a str

hashed password of new use

+
email: &'a str

Optionally, email of new use

+

Trait Implementations

Returns a copy of the value. Read more

+

Performs copy-assignment from source. Read more

+

Formats the value using the given formatter. Read more

+

Deserialize this value from the given Serde deserializer. Read more

+

This method tests for self and other values to be equal, and is used +by ==. Read more

+

This method tests for !=.

+

Serialize this value into the given Serde serializer. Read more

+

Auto Trait Implementations

Blanket Implementations

Gets the TypeId of self. Read more

+

Immutably borrows from an owned value. Read more

+

Mutably borrows from an owned value. Read more

+

Compare self to key and return true if they are equal.

+

Returns the argument unchanged.

+

Instruments this type with the provided Span, returning an +Instrumented wrapper. Read more

+

Instruments this type with the current Span, returning an +Instrumented wrapper. Read more

+

Calls U::from(self).

+

That is, this conversion is whatever the implementation of +From<T> for U chooses to do.

+

Should always be Self

+

The resulting type after obtaining ownership.

+

Creates owned data from borrowed data, usually by cloning. Read more

+

Uses borrowed data to replace owned data, usually by cloning. Read more

+

The type returned in the event of a conversion error.

+

Performs the conversion.

+

The type returned in the event of a conversion error.

+

Performs the conversion.

+

Attaches the provided Subscriber to this type, returning a +WithDispatch wrapper. Read more

+

Attaches the current default Subscriber to this type, returning a +WithDispatch wrapper. Read more

+
+ \ No newline at end of file diff --git a/pages/db/struct.UpdateEmail.html b/pages/db/struct.UpdateEmail.html new file mode 100644 index 0000000..27dcdd8 --- /dev/null +++ b/pages/db/struct.UpdateEmail.html @@ -0,0 +1,47 @@ +UpdateEmail in pages::db - Rust +
+

Struct pages::db::UpdateEmail

source · []
pub struct UpdateEmail<'a> {
+    pub username: &'a str,
+    pub new_email: &'a str,
+}
Expand description

data required to update them email of a user

+

Fields

username: &'a str

username of the user

+
new_email: &'a str

new email address of the user

+

Trait Implementations

Returns a copy of the value. Read more

+

Performs copy-assignment from source. Read more

+

Formats the value using the given formatter. Read more

+

Deserialize this value from the given Serde deserializer. Read more

+

This method tests for self and other values to be equal, and is used +by ==. Read more

+

This method tests for !=.

+

Serialize this value into the given Serde serializer. Read more

+

Auto Trait Implementations

Blanket Implementations

Gets the TypeId of self. Read more

+

Immutably borrows from an owned value. Read more

+

Mutably borrows from an owned value. Read more

+

Compare self to key and return true if they are equal.

+

Returns the argument unchanged.

+

Instruments this type with the provided Span, returning an +Instrumented wrapper. Read more

+

Instruments this type with the current Span, returning an +Instrumented wrapper. Read more

+

Calls U::from(self).

+

That is, this conversion is whatever the implementation of +From<T> for U chooses to do.

+

Should always be Self

+

The resulting type after obtaining ownership.

+

Creates owned data from borrowed data, usually by cloning. Read more

+

Uses borrowed data to replace owned data, usually by cloning. Read more

+

The type returned in the event of a conversion error.

+

Performs the conversion.

+

The type returned in the event of a conversion error.

+

Performs the conversion.

+

Attaches the provided Subscriber to this type, returning a +WithDispatch wrapper. Read more

+

Attaches the current default Subscriber to this type, returning a +WithDispatch wrapper. Read more

+
+ \ No newline at end of file diff --git a/pages/enum.Commands.html b/pages/enum.Commands.html new file mode 100644 index 0000000..7729a29 --- /dev/null +++ b/pages/enum.Commands.html @@ -0,0 +1,41 @@ +Commands in pages - Rust +
+

Enum pages::Commands

source · []
pub(crate) enum Commands {
+    Migrate,
+    Serve,
+}

Variants

Migrate

run database migrations

+

Serve

run server

+

Trait Implementations

Instantiate Self from [ArgMatches], parsing the arguments as needed. Read more

+

Instantiate Self from [ArgMatches], parsing the arguments as needed. Read more

+

Assign values from ArgMatches to self.

+

Assign values from ArgMatches to self.

+

Append to [Command] so it can instantiate Self. Read more

+

Append to [Command] so it can update self. Read more

+

Test whether Self can parse a specific subcommand

+

Auto Trait Implementations

Blanket Implementations

Gets the TypeId of self. Read more

+

Immutably borrows from an owned value. Read more

+

Mutably borrows from an owned value. Read more

+

Returns the argument unchanged.

+

Instruments this type with the provided Span, returning an +Instrumented wrapper. Read more

+

Instruments this type with the current Span, returning an +Instrumented wrapper. Read more

+

Calls U::from(self).

+

That is, this conversion is whatever the implementation of +From<T> for U chooses to do.

+

Should always be Self

+

The type returned in the event of a conversion error.

+

Performs the conversion.

+

The type returned in the event of a conversion error.

+

Performs the conversion.

+

Attaches the provided Subscriber to this type, returning a +WithDispatch wrapper. Read more

+

Attaches the current default Subscriber to this type, returning a +WithDispatch wrapper. Read more

+
+ \ No newline at end of file diff --git a/pages/errors/enum.ServiceError.html b/pages/errors/enum.ServiceError.html index 9ef8a35..7b0dedb 100644 --- a/pages/errors/enum.ServiceError.html +++ b/pages/errors/enum.ServiceError.html @@ -2,11 +2,11 @@

pub enum ServiceError {
-
Show 13 variants InternalServerError, +

Enum pages::errors::ServiceError

source · []
pub enum ServiceError {
+
Show 16 variants InternalServerError, NotAUrl, URLTooLong, WebsiteNotFound, @@ -19,6 +19,9 @@ ConfigError(ConfigError), GitError(GitError), BranchNotFound(String), + UsernameTaken, + EmailTaken, + AccountNotFound,
}
Expand description

Error data structure grouping various error subtypes

Variants

InternalServerError

All non-specific errors are grouped under this category

NotAUrl

The value you entered for url is not url“

@@ -27,22 +30,25 @@

PathTaken(Arc<Page>, Arc<Page>)

when the a path configured for a page is already taken

SecretTaken(Arc<Page>, Arc<Page>)

when the a Secret configured for a page is already taken

DuplicateRepositoryURL(Arc<Page>, Arc<Page>)

when the a Repository URL configured for a page is already taken

-

FSError(FSError)

UnauthorizedOperation(String)

BadRequest(String)

ConfigError(ConfigError)

GitError(GitError)

BranchNotFound(String)

Trait Implementations

Formats the value using the given formatter. Read more

-

Formats the value using the given formatter. Read more

-

The lower-level source of this error, if any. Read more

+

FSError(FSError)

UnauthorizedOperation(String)

BadRequest(String)

ConfigError(ConfigError)

GitError(GitError)

BranchNotFound(String)

UsernameTaken

Username is taken

+

EmailTaken

Email is taken

+

AccountNotFound

Account not found

+

Trait Implementations

Formats the value using the given formatter. Read more

+

Formats the value using the given formatter. Read more

+

The lower-level source of this error, if any. Read more

🔬 This is a nightly-only experimental API. (backtrace)

Returns a stack backtrace, if available, of where this error occurred. Read more

👎 Deprecated since 1.42.0:

use the Display impl or to_string()

👎 Deprecated since 1.33.0:

replaced by Error::source, which can support downcasting

-

Converts to this type from the input type.

-

Converts to this type from the input type.

-

Converts to this type from the input type.

-

Converts to this type from the input type.

-

This method tests for self and other values to be equal, and is used +

Converts to this type from the input type.

+

Converts to this type from the input type.

+

Converts to this type from the input type.

+

Converts to this type from the input type.

+

This method tests for self and other values to be equal, and is used by ==. Read more

-

This method tests for !=.

-

Creates full response for error. Read more

-

Returns appropriate status code for error. Read more

-

Auto Trait Implementations

Blanket Implementations

Gets the TypeId of self. Read more

+

This method tests for !=.

+

Creates full response for error. Read more

+

Returns appropriate status code for error. Read more

+

Auto Trait Implementations

Blanket Implementations

Gets the TypeId of self. Read more

Immutably borrows from an owned value. Read more

Mutably borrows from an owned value. Read more

Returns the argument unchanged.

diff --git a/pages/errors/index.html b/pages/errors/index.html index 63e4d1e..b89e24a 100644 --- a/pages/errors/index.html +++ b/pages/errors/index.html @@ -1,11 +1,11 @@ -pages::errors - Rust
pub struct ConfigError(pub ConfigErrorInner);

Tuple Fields

0: ConfigErrorInner

Trait Implementations

Formats the value using the given formatter. Read more

-

Formats the value using the given formatter. Read more

-

The lower-level source of this error, if any. Read more

+

Struct pages::errors::ConfigError

source · []
pub struct ConfigError(pub ConfigErrorInner);

Tuple Fields

0: ConfigErrorInner

Trait Implementations

Formats the value using the given formatter. Read more

+

Formats the value using the given formatter. Read more

+

The lower-level source of this error, if any. Read more

🔬 This is a nightly-only experimental API. (backtrace)

Returns a stack backtrace, if available, of where this error occurred. Read more

👎 Deprecated since 1.42.0:

use the Display impl or to_string()

👎 Deprecated since 1.33.0:

replaced by Error::source, which can support downcasting

-

This method tests for self and other values to be equal, and is used +

This method tests for self and other values to be equal, and is used by ==. Read more

This method tests for !=.

Auto Trait Implementations

Blanket Implementations

Gets the TypeId of self. Read more

diff --git a/pages/errors/struct.ErrorToResponse.html b/pages/errors/struct.ErrorToResponse.html index a8df22d..1718a9a 100644 --- a/pages/errors/struct.ErrorToResponse.html +++ b/pages/errors/struct.ErrorToResponse.html @@ -5,11 +5,11 @@

ErrorToResponse

pub struct ErrorToResponse {
+    

Struct pages::errors::ErrorToResponse

source · []
pub struct ErrorToResponse {
     pub error: String,
-}

Fields

error: String

Trait Implementations

Formats the value using the given formatter. Read more

-

Deserialize this value from the given Serde deserializer. Read more

-

Serialize this value into the given Serde serializer. Read more

+}

Fields

error: String

Trait Implementations

Formats the value using the given formatter. Read more

+

Deserialize this value from the given Serde deserializer. Read more

+

Serialize this value into the given Serde serializer. Read more

Auto Trait Implementations

Blanket Implementations

Gets the TypeId of self. Read more

Immutably borrows from an owned value. Read more

Mutably borrows from an owned value. Read more

diff --git a/pages/errors/struct.FSError.html b/pages/errors/struct.FSError.html index db42076..27fdd5a 100644 --- a/pages/errors/struct.FSError.html +++ b/pages/errors/struct.FSError.html @@ -5,13 +5,13 @@

FSError

-

Struct pages::errors::FSError

source · []
pub struct FSError(pub FSErrorInner);

Tuple Fields

0: FSErrorInner

Trait Implementations

Formats the value using the given formatter. Read more

-

Formats the value using the given formatter. Read more

-

The lower-level source of this error, if any. Read more

+

Struct pages::errors::FSError

source · []
pub struct FSError(pub FSErrorInner);

Tuple Fields

0: FSErrorInner

Trait Implementations

Formats the value using the given formatter. Read more

+

Formats the value using the given formatter. Read more

+

The lower-level source of this error, if any. Read more

🔬 This is a nightly-only experimental API. (backtrace)

Returns a stack backtrace, if available, of where this error occurred. Read more

👎 Deprecated since 1.42.0:

use the Display impl or to_string()

👎 Deprecated since 1.33.0:

replaced by Error::source, which can support downcasting

-

This method tests for self and other values to be equal, and is used +

This method tests for self and other values to be equal, and is used by ==. Read more

This method tests for !=.

Auto Trait Implementations

Blanket Implementations

Gets the TypeId of self. Read more

diff --git a/pages/errors/type.ServiceResult.html b/pages/errors/type.ServiceResult.html index 96dba32..6a8606c 100644 --- a/pages/errors/type.ServiceResult.html +++ b/pages/errors/type.ServiceResult.html @@ -5,6 +5,6 @@

ServiceResult

-

Type Definition pages::errors::ServiceResult

source · []
pub type ServiceResult<V> = Result<V, ServiceError>;
Expand description

Generic result data structure

+

Type Definition pages::errors::ServiceResult

source · []
pub type ServiceResult<V> = Result<V, ServiceError>;
Expand description

Generic result data structure

\ No newline at end of file diff --git a/pages/fn.get_json_err.html b/pages/fn.get_json_err.html index 41c9fe4..49b5dff 100644 --- a/pages/fn.get_json_err.html +++ b/pages/fn.get_json_err.html @@ -5,5 +5,5 @@
-

Function pages::get_json_err

source · []
pub fn get_json_err() -> JsonConfig
+

Function pages::get_json_err

source · []
pub fn get_json_err() -> JsonConfig
\ No newline at end of file diff --git a/pages/fn.main.html b/pages/fn.main.html index daed125..ddbac65 100644 --- a/pages/fn.main.html +++ b/pages/fn.main.html @@ -5,5 +5,5 @@
-

Function pages::main

source · []
pub(crate) fn main() -> Result<()>
+

Function pages::main

source · []
pub(crate) fn main() -> Result<()>
\ No newline at end of file diff --git a/pages/fn.serve.html b/pages/fn.serve.html new file mode 100644 index 0000000..41896b9 --- /dev/null +++ b/pages/fn.serve.html @@ -0,0 +1,9 @@ +serve in pages - Rust +
+

Function pages::serve

source · []
pub(crate) async fn serve(settings: Settings, ctx: AppCtx) -> Result<()>
+ \ No newline at end of file diff --git a/pages/fn.services.html b/pages/fn.services.html index 8568e4a..ba0b28f 100644 --- a/pages/fn.services.html +++ b/pages/fn.services.html @@ -5,5 +5,5 @@
-

Function pages::services

source · []
pub fn services(cfg: &mut ServiceConfig)
+

Function pages::services

source · []
pub fn services(cfg: &mut ServiceConfig)
\ No newline at end of file diff --git a/pages/index.html b/pages/index.html index 6ce7370..6cb8e61 100644 --- a/pages/index.html +++ b/pages/index.html @@ -2,14 +2,15 @@

-

Crate pages

source · []

Modules

-
ctx ðŸ”’
deploy ðŸ”’
errors ðŸ”’

represents all the ways a trait can fail using this crate

+

Crate pages

source · []

Modules

+
ctx ðŸ”’
db ðŸ”’
deploy ðŸ”’
errors ðŸ”’

Represents all the ways a trait can fail using this crate

git ðŸ”’
meta ðŸ”’
page ðŸ”’
preview ðŸ”’
routes ðŸ”’
serve ðŸ”’
settings ðŸ”’

Structs

-

Constants

+
Cli ðŸ”’

Enums

+
Commands ðŸ”’

Constants

Functions

-

Type Definitions

+
main ðŸ”’
serve ðŸ”’

Type Definitions

\ No newline at end of file diff --git a/pages/settings/enum.DBType.html b/pages/settings/enum.DBType.html new file mode 100644 index 0000000..181e1af --- /dev/null +++ b/pages/settings/enum.DBType.html @@ -0,0 +1,45 @@ +DBType in pages::settings - Rust +
pub enum DBType {
+    Postgres,
+}

Variants

Postgres

Implementations

Trait Implementations

Returns a copy of the value. Read more

+

Performs copy-assignment from source. Read more

+

Formats the value using the given formatter. Read more

+

Deserialize this value from the given Serde deserializer. Read more

+

Formats the value using the given formatter. Read more

+

This method tests for self and other values to be equal, and is used +by ==. Read more

+

This method tests for !=.

+

Serialize this value into the given Serde serializer. Read more

+

Auto Trait Implementations

Blanket Implementations

Gets the TypeId of self. Read more

+

Immutably borrows from an owned value. Read more

+

Mutably borrows from an owned value. Read more

+

Compare self to key and return true if they are equal.

+

Returns the argument unchanged.

+

Instruments this type with the provided Span, returning an +Instrumented wrapper. Read more

+

Instruments this type with the current Span, returning an +Instrumented wrapper. Read more

+

Calls U::from(self).

+

That is, this conversion is whatever the implementation of +From<T> for U chooses to do.

+

Should always be Self

+

The resulting type after obtaining ownership.

+

Creates owned data from borrowed data, usually by cloning. Read more

+

Uses borrowed data to replace owned data, usually by cloning. Read more

+

Converts the given value to a String. Read more

+

The type returned in the event of a conversion error.

+

Performs the conversion.

+

The type returned in the event of a conversion error.

+

Performs the conversion.

+

Attaches the provided Subscriber to this type, returning a +WithDispatch wrapper. Read more

+

Attaches the current default Subscriber to this type, returning a +WithDispatch wrapper. Read more

+
+ \ No newline at end of file diff --git a/pages/settings/index.html b/pages/settings/index.html index 14b1c93..5fd045a 100644 --- a/pages/settings/index.html +++ b/pages/settings/index.html @@ -2,9 +2,10 @@

\ No newline at end of file diff --git a/pages/settings/sidebar-items.js b/pages/settings/sidebar-items.js index 5d9152e..5255d2a 100644 --- a/pages/settings/sidebar-items.js +++ b/pages/settings/sidebar-items.js @@ -1 +1 @@ -window.SIDEBAR_ITEMS = {"struct":[["Server",""],["Settings",""]]}; \ No newline at end of file +window.SIDEBAR_ITEMS = {"enum":[["DBType",""]],"struct":[["Database",""],["Server",""],["Settings",""]]}; \ No newline at end of file diff --git a/pages/settings/struct.Database.html b/pages/settings/struct.Database.html new file mode 100644 index 0000000..6bc500b --- /dev/null +++ b/pages/settings/struct.Database.html @@ -0,0 +1,40 @@ +Database in pages::settings - Rust +
pub struct Database {
+    pub url: String,
+    pub pool: u32,
+    pub database_type: DBType,
+}

Fields

url: Stringpool: u32database_type: DBType

Trait Implementations

Returns a copy of the value. Read more

+

Performs copy-assignment from source. Read more

+

Formats the value using the given formatter. Read more

+

Deserialize this value from the given Serde deserializer. Read more

+

Auto Trait Implementations

Blanket Implementations

Gets the TypeId of self. Read more

+

Immutably borrows from an owned value. Read more

+

Mutably borrows from an owned value. Read more

+

Returns the argument unchanged.

+

Instruments this type with the provided Span, returning an +Instrumented wrapper. Read more

+

Instruments this type with the current Span, returning an +Instrumented wrapper. Read more

+

Calls U::from(self).

+

That is, this conversion is whatever the implementation of +From<T> for U chooses to do.

+

Should always be Self

+

The resulting type after obtaining ownership.

+

Creates owned data from borrowed data, usually by cloning. Read more

+

Uses borrowed data to replace owned data, usually by cloning. Read more

+

The type returned in the event of a conversion error.

+

Performs the conversion.

+

The type returned in the event of a conversion error.

+

Performs the conversion.

+

Attaches the provided Subscriber to this type, returning a +WithDispatch wrapper. Read more

+

Attaches the current default Subscriber to this type, returning a +WithDispatch wrapper. Read more

+
+ \ No newline at end of file diff --git a/pages/settings/struct.Server.html b/pages/settings/struct.Server.html index ca31be0..a8a9576 100644 --- a/pages/settings/struct.Server.html +++ b/pages/settings/struct.Server.html @@ -5,15 +5,15 @@

Server

-

Struct pages::settings::Server

source · []
pub struct Server {
+    

Struct pages::settings::Server

source · []
pub struct Server {
     pub port: u32,
     pub ip: String,
     pub workers: Option<usize>,
     pub domain: String,
-}

Fields

port: u32ip: Stringworkers: Option<usize>domain: String

Implementations

Trait Implementations

Returns a copy of the value. Read more

+}

Fields

port: u32ip: Stringworkers: Option<usize>domain: String

Implementations

Trait Implementations

Returns a copy of the value. Read more

Performs copy-assignment from source. Read more

-

Formats the value using the given formatter. Read more

-

Deserialize this value from the given Serde deserializer. Read more

+

Formats the value using the given formatter. Read more

+

Deserialize this value from the given Serde deserializer. Read more

Auto Trait Implementations

Blanket Implementations

Gets the TypeId of self. Read more

Immutably borrows from an owned value. Read more

Mutably borrows from an owned value. Read more

diff --git a/pages/settings/struct.Settings.html b/pages/settings/struct.Settings.html index b413eea..6ffda71 100644 --- a/pages/settings/struct.Settings.html +++ b/pages/settings/struct.Settings.html @@ -2,17 +2,19 @@

pub struct Settings {
+    

Struct pages::settings::Settings

source · []
pub struct Settings {
+    pub debug: bool,
     pub server: Server,
     pub source_code: String,
     pub pages: Vec<Arc<Page>>,
-}

Fields

server: Serversource_code: Stringpages: Vec<Arc<Page>>

Implementations

Trait Implementations

Returns a copy of the value. Read more

+ pub database: Database, +}

Fields

debug: boolserver: Serversource_code: Stringpages: Vec<Arc<Page>>database: Database

Implementations

Trait Implementations

Returns a copy of the value. Read more

Performs copy-assignment from source. Read more

-

Formats the value using the given formatter. Read more

-

Deserialize this value from the given Serde deserializer. Read more

+

Formats the value using the given formatter. Read more

+

Deserialize this value from the given Serde deserializer. Read more

Auto Trait Implementations

Blanket Implementations

Gets the TypeId of self. Read more

Immutably borrows from an owned value. Read more

Mutably borrows from an owned value. Read more

diff --git a/pages/sidebar-items.js b/pages/sidebar-items.js index 7f5410a..3173be2 100644 --- a/pages/sidebar-items.js +++ b/pages/sidebar-items.js @@ -1 +1 @@ -window.SIDEBAR_ITEMS = {"constant":[["CACHE_AGE",""],["GIT_COMMIT_HASH",""],["PKG_DESCRIPTION",""],["PKG_HOMEPAGE",""],["PKG_NAME",""],["V1_API_ROUTES",""],["VERSION",""]],"fn":[["get_json_err",""],["main",""],["services",""]],"mod":[["ctx",""],["deploy",""],["errors","represents all the ways a trait can fail using this crate"],["git",""],["meta",""],["page",""],["preview",""],["routes",""],["serve",""],["settings",""]],"struct":[["Settings",""]],"type":[["AppCtx",""]]}; \ No newline at end of file +window.SIDEBAR_ITEMS = {"constant":[["CACHE_AGE",""],["GIT_COMMIT_HASH",""],["PKG_DESCRIPTION",""],["PKG_HOMEPAGE",""],["PKG_NAME",""],["V1_API_ROUTES",""],["VERSION",""]],"enum":[["Commands",""]],"fn":[["get_json_err",""],["main",""],["serve",""],["services",""]],"mod":[["ctx",""],["db",""],["deploy",""],["errors","Represents all the ways a trait can fail using this crate"],["git",""],["meta",""],["page",""],["preview",""],["routes",""],["serve",""],["settings",""]],"struct":[["Cli",""],["Settings",""]],"type":[["AppCtx",""]]}; \ No newline at end of file diff --git a/pages/struct.Cli.html b/pages/struct.Cli.html new file mode 100644 index 0000000..6b04503 --- /dev/null +++ b/pages/struct.Cli.html @@ -0,0 +1,47 @@ +Cli in pages - Rust +
+

Struct pages::Cli

source · []
pub(crate) struct Cli {
+    pub(crate) command: Commands,
+}

Fields

command: Commands

Trait Implementations

Append to [Command] so it can instantiate Self. Read more

+

Append to [Command] so it can update self. Read more

+

Deprecated, replaced with CommandFactory::command

+

Deprecated, replaced with CommandFactory::command_for_update

+

Build a [Command] that can instantiate Self. Read more

+

Build a [Command] that can update self. Read more

+

Instantiate Self from [ArgMatches], parsing the arguments as needed. Read more

+

Instantiate Self from [ArgMatches], parsing the arguments as needed. Read more

+

Assign values from ArgMatches to self.

+

Assign values from ArgMatches to self.

+

Parse from std::env::args_os(), exit on error

+

Parse from std::env::args_os(), return Err on error.

+

Parse from iterator, exit on error

+

Parse from iterator, return Err on error.

+

Update from iterator, exit on error

+

Update from iterator, return Err on error.

+

Auto Trait Implementations

Blanket Implementations

Gets the TypeId of self. Read more

+

Immutably borrows from an owned value. Read more

+

Mutably borrows from an owned value. Read more

+

Returns the argument unchanged.

+

Instruments this type with the provided Span, returning an +Instrumented wrapper. Read more

+

Instruments this type with the current Span, returning an +Instrumented wrapper. Read more

+

Calls U::from(self).

+

That is, this conversion is whatever the implementation of +From<T> for U chooses to do.

+

Should always be Self

+

The type returned in the event of a conversion error.

+

Performs the conversion.

+

The type returned in the event of a conversion error.

+

Performs the conversion.

+

Attaches the provided Subscriber to this type, returning a +WithDispatch wrapper. Read more

+

Attaches the current default Subscriber to this type, returning a +WithDispatch wrapper. Read more

+
+ \ No newline at end of file diff --git a/pages/struct.Settings.html b/pages/struct.Settings.html index abc9586..3cd92c5 100644 --- a/pages/struct.Settings.html +++ b/pages/struct.Settings.html @@ -2,17 +2,19 @@

-

Struct pages::Settings

source · []
pub struct Settings {
+    

Struct pages::Settings

source · []
pub struct Settings {
+    pub debug: bool,
     pub server: Server,
     pub source_code: String,
     pub pages: Vec<Arc<Page>>,
-}

Fields

server: Serversource_code: Stringpages: Vec<Arc<Page>>

Implementations

Trait Implementations

Returns a copy of the value. Read more

+ pub database: Database, +}

Fields

debug: boolserver: Serversource_code: Stringpages: Vec<Arc<Page>>database: Database

Implementations

Trait Implementations

Returns a copy of the value. Read more

Performs copy-assignment from source. Read more

-

Formats the value using the given formatter. Read more

-

Deserialize this value from the given Serde deserializer. Read more

+

Formats the value using the given formatter. Read more

+

Deserialize this value from the given Serde deserializer. Read more

Auto Trait Implementations

Blanket Implementations

Gets the TypeId of self. Read more

Immutably borrows from an owned value. Read more

Mutably borrows from an owned value. Read more

diff --git a/pages/type.AppCtx.html b/pages/type.AppCtx.html index 3051992..0b7799c 100644 --- a/pages/type.AppCtx.html +++ b/pages/type.AppCtx.html @@ -5,5 +5,5 @@

AppCtx

-

Type Definition pages::AppCtx

source · []
pub type AppCtx = WebData<Arc<Ctx>>;
+

Type Definition pages::AppCtx

source · []
pub type AppCtx = WebData<Arc<Ctx>>;
\ No newline at end of file diff --git a/search-index.js b/search-index.js index c796524..771bc1c 100644 --- a/search-index.js +++ b/search-index.js @@ -1,5 +1,5 @@ var searchIndex = JSON.parse('{\ -"pages":{"doc":"","t":[6,17,17,17,17,17,3,17,17,0,0,0,5,0,5,0,0,12,0,0,0,12,5,0,12,3,11,11,11,11,11,11,11,12,11,11,11,11,11,3,3,3,11,11,11,11,11,11,11,11,11,11,12,11,11,11,11,11,11,12,3,11,11,11,11,11,11,11,5,11,11,11,11,11,11,11,11,11,12,11,11,11,11,11,11,11,11,11,12,0,12,12,11,11,11,5,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,3,11,11,11,11,11,3,11,11,11,12,11,11,11,11,11,12,11,12,12,13,13,3,13,13,3,3,13,13,13,13,13,13,4,6,13,13,13,11,11,11,11,11,11,11,11,11,11,11,11,12,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,12,12,12,12,12,12,12,12,12,12,12,12,13,4,13,13,13,13,3,4,13,13,13,13,13,11,11,11,11,11,11,11,11,11,11,11,11,11,12,11,11,11,11,11,11,11,12,11,11,11,11,11,11,11,11,11,11,11,11,11,11,12,11,11,5,5,5,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,12,12,3,11,11,11,11,3,11,11,11,11,11,11,12,11,11,11,0,11,5,12,11,11,11,11,11,11,11,12,11,11,3,11,11,12,11,12,11,11,11,11,11,11,3,11,11,11,12,11,11,11,11,11,12,11,11,11,11,11,11,11,11,11,11,11,11,11,11,12,12,12,11,11,11,11,11,11,3,12,11,11,12,11,11,11,11,11,12,11,11,11,11,17,3,11,11,12,11,11,12,11,12,5,11,11,11,11,11,11,5,11,3,11,11,0,5,11,11,11,11,3,11,11,12,11,11,11,11,11,11,11,3,3,11,11,11,11,11,11,11,11,11,11,11,12,11,11,11,11,11,11,11,11,12,11,12,12,12,12,11,11,11,11,11,11,11,11,11,11,12],"n":["AppCtx","CACHE_AGE","GIT_COMMIT_HASH","PKG_DESCRIPTION","PKG_HOMEPAGE","PKG_NAME","Settings","V1_API_ROUTES","VERSION","ctx","deploy","errors","get_json_err","git","main","meta","page","pages","preview","routes","serve","server","services","settings","source_code","Ctx","borrow","borrow_mut","clone","clone_into","from","into","new","settings","to_owned","try_from","try_into","type_id","vzip","DeployEvent","DeployInfo","DeploySecret","borrow","borrow","borrow","borrow","borrow","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","branch","clone","clone","clone","clone_into","clone_into","clone_into","commit","deploy_info","deserialize","deserialize","deserialize","eq","eq","equivalent","equivalent","find_page","fmt","fmt","fmt","from","from","from","from","from","from_page","head","into","into","into","into","into","ne","ne","register","register","remote","routes","secret","secret","serialize","serialize","serialize","services","to_owned","to_owned","to_owned","try_from","try_from","try_from","try_from","try_from","try_into","try_into","try_into","try_into","try_into","type_id","type_id","type_id","type_id","type_id","update","vzip","vzip","vzip","vzip","vzip","Deploy","borrow","borrow_mut","from","info","into","new","try_from","try_into","type_id","update","vzip","0","0","BadRequest","BranchNotFound","ConfigError","ConfigError","DuplicateRepositoryURL","ErrorToResponse","FSError","FSError","GitError","InternalServerError","NotAUrl","PathTaken","SecretTaken","ServiceError","ServiceResult","URLTooLong","UnauthorizedOperation","WebsiteNotFound","borrow","borrow","borrow","borrow","borrow_mut","borrow_mut","borrow_mut","borrow_mut","deserialize","eq","eq","eq","error","error_response","fmt","fmt","fmt","fmt","fmt","fmt","fmt","from","from","from","from","from","from","from","from","into","into","into","into","ne","serialize","source","source","source","status_code","to_string","to_string","to_string","try_from","try_from","try_from","try_from","try_into","try_into","try_into","try_into","type_id","type_id","type_id","type_id","vzip","vzip","vzip","vzip","0","0","0","0","0","0","0","0","0","1","1","1","Binary","ContentType","Deprecated","Dir","Empty","Executable","FileInfo","GitFileMode","Regular","Submodule","Symlink","Text","Unsupported","borrow","borrow","borrow","borrow_mut","borrow_mut","borrow_mut","bytes","clone","clone","clone","clone_into","clone_into","clone_into","content","deserialize","eq","eq","eq","equivalent","equivalent","equivalent","filename","fmt","fmt","fmt","from","from","from","from","from","from","from_blob","from_primitive","into","into","into","mime","ne","ne","read_file","read_file_inner","read_preview_file","serialize","to_owned","to_owned","to_owned","try_from","try_from","try_from","try_from_primitive","try_into","try_into","try_into","type_id","type_id","type_id","vzip","vzip","vzip","0","0","BuildDetails","borrow","borrow","borrow_mut","borrow_mut","build_details","clone","clone_into","deserialize","fmt","from","from","git_commit_hash","into","into","register","routes","serialize","services","source_code","to_owned","try_from","try_from","try_into","try_into","type_id","type_id","version","vzip","vzip","Meta","borrow","borrow_mut","build_details","from","health","into","new","try_from","try_into","type_id","vzip","Page","_fetch_remote_branch","borrow","borrow_mut","branch","clone","clone_into","create_repo","deploy_branch","deserialize","domain","eq","equivalent","fast_forward","fetch","fmt","from","get_deploy_branch","get_deploy_commit","get_deploy_remote","into","merge","ne","normal_merge","open_repo","path","repo","secret","to_owned","try_from","try_into","type_id","update","vzip","Preview","base","borrow","borrow_mut","delimiter","extract","from","get_name","into","new","prefix","try_from","try_into","type_id","vzip","ROUTES","Routes","borrow","borrow_mut","deploy","from","into","meta","new","serve","services","try_from","try_into","type_id","vzip","borrow","borrow_mut","find_page","from","index","into","register","routes","services","try_from","try_into","type_id","vzip","Serve","borrow","borrow_mut","catch_all","from","into","new","try_from","try_into","type_id","vzip","Server","Settings","borrow","borrow","borrow_mut","borrow_mut","check_url","clone","clone","clone_into","clone_into","deserialize","deserialize","domain","fmt","fmt","from","from","get_ip","init","into","into","ip","new","pages","port","server","source_code","to_owned","to_owned","try_from","try_from","try_into","try_into","type_id","type_id","vzip","vzip","workers"],"q":["pages","","","","","","","","","","","","","","","","","","","","","","","","","pages::ctx","","","","","","","","","","","","","","pages::deploy","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","pages::deploy::routes","","","","","","","","","","","","pages::errors","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","pages::errors::ServiceError","","","","","","","","","","","","pages::git","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","pages::git::ContentType","","pages::meta","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","pages::meta::routes","","","","","","","","","","","","pages::page","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","pages::preview","","","","","","","","","","","","","","","pages::routes","","","","","","","","","","","","","","","pages::serve","","","","","","","","","","","","","pages::serve::routes","","","","","","","","","","","pages::settings","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","",""],"d":["","","","","","","","","","","","represents all the ways a trait can fail using this crate","","","","","","","","","","","","","","","","","","","Returns the argument unchanged.","Calls U::from(self).","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","","","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","Returns the argument unchanged.","","Calls U::from(self).","","","","","","","","","","","","","when the a Repository URL configured for a page is already …","","","","","All non-specific errors are grouped under this category","The value you entered for url is not url“","when the a path configured for a page is already taken","when the a Secret configured for a page is already taken","Error data structure grouping various error subtypes","Generic result data structure","URL too long, maximum length can’t be greater then 2048 …","","website not found","","","","","","","","","","","","","","","","","","","","","","Returns the argument unchanged.","Returns the argument unchanged.","","","","Returns the argument unchanged.","","Returns the argument unchanged.","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","Deprecated represent non-executable files with the group …","Dir represent a Directory.","Empty is used as the GitFileMode of tree elements when …","Executable represents executable files.","","A FileMode represents the kind of tree entries used by …","Regular represent non-executable files.","Submodule represents git submodules. This mode has no …","Symlink represents symbolic links to files.","","Unsupported file mode","","","","","","","","","","","","","","","","","","","","","","","","","","","","","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","","","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","","","","Please note that this method expects path to not contain …","","","","","","","","","","","","","","","","","","","","","","","","","","","emmits build details of the bninary","","","","","Returns the argument unchanged.","Returns the argument unchanged.","","Calls U::from(self).","Calls U::from(self).","","","","","","","","","","","","","","","","","","","","Returns the argument unchanged.","","Calls U::from(self).","","","","","","","","","","","","","","","","","","","","","","Returns the argument unchanged.","","","","Calls U::from(self).","","","","","","","","","","","","","","","","","","","","Returns the argument unchanged.","","Calls U::from(self).","","","","","","","","","","","","Returns the argument unchanged.","Calls U::from(self).","","","","","","","","","","","","Returns the argument unchanged.","","Calls U::from(self).","","","","","","","","","","","","Returns the argument unchanged.","Calls U::from(self).","","","","","","","","","","","","","","","","","","","","","","Returns the argument unchanged.","Returns the argument unchanged.","","","Calls U::from(self).","Calls U::from(self).","","","","","","","","","","","","","","","","",""],"i":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1,0,0,1,0,2,2,2,2,2,2,2,2,2,2,2,2,2,0,0,0,3,4,5,6,7,3,4,5,6,7,3,3,5,6,3,5,6,6,0,3,5,6,5,6,5,6,0,3,5,6,3,4,5,6,7,6,6,3,4,5,6,7,5,6,4,7,6,0,3,5,3,5,6,0,3,5,6,3,4,5,6,7,3,4,5,6,7,3,4,5,6,7,0,3,4,5,6,7,0,8,8,8,8,8,8,8,8,8,8,8,9,10,11,11,0,11,11,0,0,11,11,11,11,11,11,0,0,11,11,11,9,10,11,12,9,10,11,12,12,9,10,11,12,11,9,9,10,10,11,11,12,9,10,11,11,11,11,11,12,9,10,11,12,11,12,9,10,11,11,9,10,11,9,10,11,12,9,10,11,12,9,10,11,12,9,10,11,12,13,14,15,16,17,18,19,20,21,13,14,15,22,0,23,23,23,23,0,0,23,23,23,22,23,23,24,22,23,24,22,22,23,24,22,23,24,22,24,22,23,24,22,23,24,22,24,23,24,22,23,23,23,23,24,22,22,23,23,24,22,24,24,22,0,0,0,22,23,24,22,23,24,22,23,23,24,22,23,24,22,23,24,22,25,26,0,27,28,27,28,0,27,27,27,27,27,28,27,27,28,28,0,27,0,27,27,27,28,27,28,27,28,27,27,28,0,29,29,29,29,29,29,29,29,29,29,29,0,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,0,31,31,31,31,31,31,31,31,31,31,31,31,31,31,0,0,32,32,32,32,32,32,32,32,0,32,32,32,32,33,33,0,33,0,33,33,0,0,33,33,33,33,0,34,34,34,34,34,34,34,34,34,34,0,0,35,1,35,1,1,35,1,35,1,35,1,35,35,1,35,1,35,1,35,1,35,1,1,35,1,1,35,1,35,1,35,1,35,1,35,1,35],"f":[null,null,null,null,null,null,null,null,null,null,null,null,[[],["jsonconfig",3]],null,[[],["result",6]],null,null,null,null,null,null,null,[[["serviceconfig",3]]],null,null,null,[[["",0]],["",0]],[[["",0]],["",0]],[[["ctx",3]],["ctx",3]],[[["",0],["",0]]],[[]],[[]],[[["settings",3]],["arc",3,[["ctx",3]]]],null,[[["",0]]],[[],["result",4]],[[],["result",4]],[[["",0]],["typeid",3]],[[]],null,null,null,[[["",0]],["",0]],[[["",0]],["",0]],[[["",0]],["",0]],[[["",0]],["",0]],[[["",0]],["",0]],[[["",0]],["",0]],[[["",0]],["",0]],[[["",0]],["",0]],[[["",0]],["",0]],[[["",0]],["",0]],null,[[["deployevent",3]],["deployevent",3]],[[["deploysecret",3]],["deploysecret",3]],[[["deployinfo",3]],["deployinfo",3]],[[["",0],["",0]]],[[["",0],["",0]]],[[["",0],["",0]]],null,null,[[],["result",4,[["deployevent",3]]]],[[],["result",4,[["deploysecret",3]]]],[[],["result",4,[["deployinfo",3]]]],[[["deploysecret",3],["deploysecret",3]],["bool",0]],[[["deployinfo",3],["deployinfo",3]],["bool",0]],[[["",0],["",0]],["bool",0]],[[["",0],["",0]],["bool",0]],[[["str",0],["appctx",6]],["option",4,[["page",3]]]],[[["deployevent",3],["formatter",3]],["result",6]],[[["deploysecret",3],["formatter",3]],["result",6]],[[["deployinfo",3],["formatter",3]],["result",6]],[[]],[[]],[[]],[[]],[[]],[[["page",3]],["result",4,[["deployinfo",3],["serviceerror",4]]]],null,[[]],[[]],[[]],[[]],[[]],[[["deploysecret",3],["deploysecret",3]],["bool",0]],[[["deployinfo",3],["deployinfo",3]],["bool",0]],[[["update",3],["appservice",3]]],[[["deploy_info",3],["appservice",3]]],null,null,null,null,[[["deployevent",3]],["result",4]],[[["deploysecret",3]],["result",4]],[[["deployinfo",3]],["result",4]],[[["serviceconfig",3]]],[[["",0]]],[[["",0]]],[[["",0]]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[["",0]],["typeid",3]],[[["",0]],["typeid",3]],[[["",0]],["typeid",3]],[[["",0]],["typeid",3]],[[["",0]],["typeid",3]],null,[[]],[[]],[[]],[[]],[[]],null,[[["",0]],["",0]],[[["",0]],["",0]],[[]],null,[[]],[[],["deploy",3]],[[],["result",4]],[[],["result",4]],[[["",0]],["typeid",3]],null,[[]],null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,[[["",0]],["",0]],[[["",0]],["",0]],[[["",0]],["",0]],[[["",0]],["",0]],[[["",0]],["",0]],[[["",0]],["",0]],[[["",0]],["",0]],[[["",0]],["",0]],[[],["result",4,[["errortoresponse",3]]]],[[["fserror",3],["fserror",3]],["bool",0]],[[["configerror",3],["configerror",3]],["bool",0]],[[["serviceerror",4],["serviceerror",4]],["bool",0]],null,[[["serviceerror",4]],["httpresponse",3]],[[["fserror",3],["formatter",3]],["result",6]],[[["fserror",3],["formatter",3]],["result",6]],[[["configerror",3],["formatter",3]],["result",6]],[[["configerror",3],["formatter",3]],["result",6]],[[["serviceerror",4],["formatter",3]],["result",6]],[[["serviceerror",4],["formatter",3]],["result",6]],[[["errortoresponse",3],["formatter",3]],["result",6]],[[]],[[]],[[["configerrorinner",4]],["serviceerror",4]],[[["fserrorinner",3]],["serviceerror",4]],[[["giterror",3]],["serviceerror",4]],[[]],[[["parseerror",4]],["serviceerror",4]],[[]],[[]],[[]],[[]],[[]],[[["serviceerror",4],["serviceerror",4]],["bool",0]],[[["errortoresponse",3]],["result",4]],[[["fserror",3]],["option",4,[["error",8]]]],[[["configerror",3]],["option",4,[["error",8]]]],[[["serviceerror",4]],["option",4,[["error",8]]]],[[["serviceerror",4]],["statuscode",3]],[[["",0]],["string",3]],[[["",0]],["string",3]],[[["",0]],["string",3]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[["",0]],["typeid",3]],[[["",0]],["typeid",3]],[[["",0]],["typeid",3]],[[["",0]],["typeid",3]],[[]],[[]],[[]],[[]],null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,[[["",0]],["",0]],[[["",0]],["",0]],[[["",0]],["",0]],[[["",0]],["",0]],[[["",0]],["",0]],[[["",0]],["",0]],[[["contenttype",4]],["vec",3,[["u8",0]]]],[[["gitfilemode",4]],["gitfilemode",4]],[[["fileinfo",3]],["fileinfo",3]],[[["contenttype",4]],["contenttype",4]],[[["",0],["",0]]],[[["",0],["",0]]],[[["",0],["",0]]],null,[[],["result",4,[["contenttype",4]]]],[[["gitfilemode",4],["gitfilemode",4]],["bool",0]],[[["fileinfo",3],["fileinfo",3]],["bool",0]],[[["contenttype",4],["contenttype",4]],["bool",0]],[[["",0],["",0]],["bool",0]],[[["",0],["",0]],["bool",0]],[[["",0],["",0]],["bool",0]],null,[[["gitfilemode",4],["formatter",3]],["result",6]],[[["fileinfo",3],["formatter",3]],["result",6]],[[["contenttype",4],["formatter",3]],["result",6]],[[["isize",0]],["gitfilemode",4]],[[["treeentry",3]],["gitfilemode",4]],[[["treeentry",3]],["gitfilemode",4]],[[]],[[]],[[]],[[["blob",3]],["contenttype",4]],[[],["gitfilemode",4]],[[]],[[]],[[]],null,[[["fileinfo",3],["fileinfo",3]],["bool",0]],[[["contenttype",4],["contenttype",4]],["bool",0]],[[["str",0],["str",0]],["result",4,[["fileinfo",3],["serviceerror",4]]]],[[["repository",3],["str",0],["tree",3]],["result",4,[["fileinfo",3],["serviceerror",4]]]],[[["str",0],["str",0],["str",0]],["result",4,[["fileinfo",3],["serviceerror",4]]]],[[["contenttype",4]],["result",4]],[[["",0]]],[[["",0]]],[[["",0]]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4,[["gitfilemode",4],["tryfromprimitiveerror",3,[["gitfilemode",4]]]]]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[["",0]],["typeid",3]],[[["",0]],["typeid",3]],[[["",0]],["typeid",3]],[[]],[[]],[[]],null,null,null,[[["",0]],["",0]],[[["",0]],["",0]],[[["",0]],["",0]],[[["",0]],["",0]],null,[[["builddetails",3]],["builddetails",3]],[[["",0],["",0]]],[[],["result",4,[["builddetails",3]]]],[[["builddetails",3],["formatter",3]],["result",6]],[[]],[[]],null,[[]],[[]],[[["build_details",3],["appservice",3]]],null,[[["builddetails",3]],["result",4]],[[["serviceconfig",3]]],null,[[["",0]]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[["",0]],["typeid",3]],[[["",0]],["typeid",3]],null,[[]],[[]],null,[[["",0]],["",0]],[[["",0]],["",0]],null,[[]],null,[[]],[[],["meta",3]],[[],["result",4]],[[],["result",4]],[[["",0]],["typeid",3]],[[]],null,[[["page",3],["repository",3],["str",0]],["result",4,[["serviceerror",4]]]],[[["",0]],["",0]],[[["",0]],["",0]],null,[[["page",3]],["page",3]],[[["",0],["",0]]],[[["page",3]],["result",4,[["repository",3],["serviceerror",4]]]],[[["page",3],["repository",3]],["result",4,[["serviceerror",4]]]],[[],["result",4,[["page",3]]]],null,[[["page",3],["page",3]],["bool",0]],[[["",0],["",0]],["bool",0]],[[["repository",3],["reference",3],["annotatedcommit",3]],["result",4,[["serviceerror",4]]]],[[["page",3],["repository",3],["str",0]],["result",4,[["annotatedcommit",3],["serviceerror",4]]]],[[["page",3],["formatter",3]],["result",6]],[[]],[[["page",3],["repository",3]],["result",4,[["string",3],["serviceerror",4]]]],[[["repository",3]],["result",4,[["oid",3],["serviceerror",4]]]],[[["repository",3]],["result",4,[["remote",3],["serviceerror",4]]]],[[]],[[["page",3],["repository",3],["annotatedcommit",3],["str",0]],["result",4,[["serviceerror",4]]]],[[["page",3],["page",3]],["bool",0]],[[["repository",3],["annotatedcommit",3],["annotatedcommit",3]],["result",4,[["error",3]]]],[[["page",3]],["result",4,[["repository",3],["serviceerror",4]]]],null,null,null,[[["",0]]],[[],["result",4]],[[],["result",4]],[[["",0]],["typeid",3]],[[["page",3],["str",0]],["result",4,[["serviceerror",4]]]],[[]],null,null,[[["",0]],["",0]],[[["",0]],["",0]],null,[[["preview",3],["str",0]],["option",4,[["str",0]]]],[[]],[[["preview",3],["usize",0]],["string",3]],[[]],[[["appctx",6]],["preview",3]],null,[[],["result",4]],[[],["result",4]],[[["",0]],["typeid",3]],[[]],null,null,[[["",0]],["",0]],[[["",0]],["",0]],null,[[]],[[]],null,[[],["routes",3]],null,[[["serviceconfig",3]]],[[],["result",4]],[[],["result",4]],[[["",0]],["typeid",3]],[[]],[[["",0]],["",0]],[[["",0]],["",0]],[[["str",0],["appctx",6]],["option",4,[["page",3]]]],[[]],null,[[]],[[["index",3],["appservice",3]]],null,[[["serviceconfig",3]]],[[],["result",4]],[[],["result",4]],[[["",0]],["typeid",3]],[[]],null,[[["",0]],["",0]],[[["",0]],["",0]],null,[[]],[[]],[[],["serve",3]],[[],["result",4]],[[],["result",4]],[[["",0]],["typeid",3]],[[]],null,null,[[["",0]],["",0]],[[["",0]],["",0]],[[["",0]],["",0]],[[["",0]],["",0]],[[["settings",3]]],[[["server",3]],["server",3]],[[["settings",3]],["settings",3]],[[["",0],["",0]]],[[["",0],["",0]]],[[],["result",4,[["server",3]]]],[[],["result",4,[["settings",3]]]],null,[[["server",3],["formatter",3]],["result",6]],[[["settings",3],["formatter",3]],["result",6]],[[]],[[]],[[["server",3]],["string",3]],[[["settings",3]]],[[]],[[]],null,[[],["result",4,[["settings",3],["serviceerror",4]]]],null,null,null,null,[[["",0]]],[[["",0]]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[["",0]],["typeid",3]],[[["",0]],["typeid",3]],[[]],[[]],null],"p":[[3,"Settings"],[3,"Ctx"],[3,"DeployEvent"],[3,"update"],[3,"DeploySecret"],[3,"DeployInfo"],[3,"deploy_info"],[3,"Deploy"],[3,"FSError"],[3,"ConfigError"],[4,"ServiceError"],[3,"ErrorToResponse"],[13,"PathTaken"],[13,"SecretTaken"],[13,"DuplicateRepositoryURL"],[13,"FSError"],[13,"UnauthorizedOperation"],[13,"BadRequest"],[13,"ConfigError"],[13,"GitError"],[13,"BranchNotFound"],[4,"ContentType"],[4,"GitFileMode"],[3,"FileInfo"],[13,"Binary"],[13,"Text"],[3,"BuildDetails"],[3,"build_details"],[3,"Meta"],[3,"Page"],[3,"Preview"],[3,"Routes"],[3,"index"],[3,"Serve"],[3,"Server"]]}\ +"pages":{"doc":"","t":[6,17,3,4,17,13,17,17,17,13,3,17,17,11,11,11,11,11,11,11,11,12,0,12,0,12,0,0,11,11,11,11,11,11,5,0,11,11,11,11,11,5,0,0,12,0,0,0,5,12,5,0,12,11,11,11,11,11,11,11,11,11,11,11,11,6,3,11,11,11,11,12,11,11,11,12,11,11,11,11,11,12,3,4,3,13,13,3,13,4,3,3,3,13,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,12,12,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,5,11,11,12,12,11,11,11,11,11,11,11,11,5,5,11,11,11,11,11,12,5,11,12,12,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,12,12,12,12,11,11,11,11,11,11,11,11,11,12,12,12,12,3,3,3,11,11,11,11,11,11,11,11,11,11,12,11,11,11,11,11,11,12,3,11,11,11,11,11,11,11,5,11,11,11,11,11,11,11,11,11,12,11,11,11,11,11,11,11,11,11,12,0,12,12,11,11,11,5,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,3,11,11,11,11,11,3,11,11,11,12,11,11,11,11,11,12,11,12,12,13,13,13,3,13,13,13,3,3,13,13,13,13,13,13,4,6,13,13,13,13,11,11,11,11,11,11,11,11,11,11,11,11,12,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,12,12,12,12,12,12,12,12,12,12,12,12,13,4,13,13,13,13,3,4,13,13,13,13,13,11,11,11,11,11,11,11,11,11,11,11,11,11,12,11,11,11,11,11,11,11,12,11,11,11,11,11,11,11,11,11,11,11,11,11,11,12,11,11,5,5,5,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,12,12,3,11,11,11,11,3,11,11,11,11,11,11,12,11,11,11,0,11,5,12,11,11,11,11,11,11,11,12,11,11,3,11,11,12,11,12,11,11,11,11,11,11,3,11,11,11,12,11,11,11,11,11,12,11,11,11,11,11,11,11,11,11,11,11,11,11,11,12,12,12,11,11,11,11,11,11,3,12,11,11,12,11,11,11,11,11,12,11,11,11,11,17,3,11,11,12,11,11,12,11,12,5,11,11,11,11,11,11,5,11,3,11,11,0,5,11,11,11,11,3,11,11,12,11,11,11,11,11,11,11,4,3,13,3,3,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,12,12,12,11,11,11,11,12,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,12,11,12,12,12,11,12,12,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,12,11,11,11,11,12],"n":["AppCtx","CACHE_AGE","Cli","Commands","GIT_COMMIT_HASH","Migrate","PKG_DESCRIPTION","PKG_HOMEPAGE","PKG_NAME","Serve","Settings","V1_API_ROUTES","VERSION","augment_args","augment_args_for_update","augment_subcommands","augment_subcommands_for_update","borrow","borrow","borrow_mut","borrow_mut","command","ctx","database","db","debug","deploy","errors","from","from","from_arg_matches","from_arg_matches","from_arg_matches_mut","from_arg_matches_mut","get_json_err","git","has_subcommand","into","into","into_app","into_app_for_update","main","meta","page","pages","preview","routes","serve","serve","server","services","settings","source_code","try_from","try_from","try_into","try_into","type_id","type_id","update_from_arg_matches","update_from_arg_matches","update_from_arg_matches_mut","update_from_arg_matches_mut","vzip","vzip","ArcCtx","Ctx","borrow","borrow_mut","clone","clone_into","db","from","into","new","settings","to_owned","try_from","try_into","type_id","vzip","0","Conn","ConnectionOptions","Database","Email","Existing","Fresh","Fresh","Login","NameHash","Register","UpdateEmail","Username","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","clone","clone","clone","clone","clone","clone_into","clone_into","clone_into","clone_into","clone_into","connect","delete_user","deserialize","deserialize","deserialize","deserialize","disable_logging","email","email_exists","eq","eq","eq","eq","equivalent","equivalent","equivalent","equivalent","fmt","fmt","fmt","fmt","from","from","from","from","from","from","from","from","get_db","get_email","get_password","hash","hash","into","into","into","into","into","into","into","into","map_register_err","map_row_not_found_err","migrate","ne","ne","ne","ne","new_email","now_unix_time_stamp","ping","pool","pool_options","register","serialize","serialize","serialize","serialize","to_owned","to_owned","to_owned","to_owned","to_owned","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","update_email","update_password","update_username","url","username","username","username","username_exists","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","0","0","0","0","DeployEvent","DeployInfo","DeploySecret","borrow","borrow","borrow","borrow","borrow","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","branch","clone","clone","clone","clone_into","clone_into","clone_into","commit","deploy_info","deserialize","deserialize","deserialize","eq","eq","equivalent","equivalent","find_page","fmt","fmt","fmt","from","from","from","from","from","from_page","head","into","into","into","into","into","ne","ne","register","register","remote","routes","secret","secret","serialize","serialize","serialize","services","to_owned","to_owned","to_owned","try_from","try_from","try_from","try_from","try_from","try_into","try_into","try_into","try_into","try_into","type_id","type_id","type_id","type_id","type_id","update","vzip","vzip","vzip","vzip","vzip","Deploy","borrow","borrow_mut","from","info","into","new","try_from","try_into","type_id","update","vzip","0","0","AccountNotFound","BadRequest","BranchNotFound","ConfigError","ConfigError","DuplicateRepositoryURL","EmailTaken","ErrorToResponse","FSError","FSError","GitError","InternalServerError","NotAUrl","PathTaken","SecretTaken","ServiceError","ServiceResult","URLTooLong","UnauthorizedOperation","UsernameTaken","WebsiteNotFound","borrow","borrow","borrow","borrow","borrow_mut","borrow_mut","borrow_mut","borrow_mut","deserialize","eq","eq","eq","error","error_response","fmt","fmt","fmt","fmt","fmt","fmt","fmt","from","from","from","from","from","from","from","from","into","into","into","into","ne","serialize","source","source","source","status_code","to_string","to_string","to_string","try_from","try_from","try_from","try_from","try_into","try_into","try_into","try_into","type_id","type_id","type_id","type_id","vzip","vzip","vzip","vzip","0","0","0","0","0","0","0","0","0","1","1","1","Binary","ContentType","Deprecated","Dir","Empty","Executable","FileInfo","GitFileMode","Regular","Submodule","Symlink","Text","Unsupported","borrow","borrow","borrow","borrow_mut","borrow_mut","borrow_mut","bytes","clone","clone","clone","clone_into","clone_into","clone_into","content","deserialize","eq","eq","eq","equivalent","equivalent","equivalent","filename","fmt","fmt","fmt","from","from","from","from","from","from","from_blob","from_primitive","into","into","into","mime","ne","ne","read_file","read_file_inner","read_preview_file","serialize","to_owned","to_owned","to_owned","try_from","try_from","try_from","try_from_primitive","try_into","try_into","try_into","type_id","type_id","type_id","vzip","vzip","vzip","0","0","BuildDetails","borrow","borrow","borrow_mut","borrow_mut","build_details","clone","clone_into","deserialize","fmt","from","from","git_commit_hash","into","into","register","routes","serialize","services","source_code","to_owned","try_from","try_from","try_into","try_into","type_id","type_id","version","vzip","vzip","Meta","borrow","borrow_mut","build_details","from","health","into","new","try_from","try_into","type_id","vzip","Page","_fetch_remote_branch","borrow","borrow_mut","branch","clone","clone_into","create_repo","deploy_branch","deserialize","domain","eq","equivalent","fast_forward","fetch","fmt","from","get_deploy_branch","get_deploy_commit","get_deploy_remote","into","merge","ne","normal_merge","open_repo","path","repo","secret","to_owned","try_from","try_into","type_id","update","vzip","Preview","base","borrow","borrow_mut","delimiter","extract","from","get_name","into","new","prefix","try_from","try_into","type_id","vzip","ROUTES","Routes","borrow","borrow_mut","deploy","from","into","meta","new","serve","services","try_from","try_into","type_id","vzip","borrow","borrow_mut","find_page","from","index","into","register","routes","services","try_from","try_into","type_id","vzip","Serve","borrow","borrow_mut","catch_all","from","into","new","try_from","try_into","type_id","vzip","DBType","Database","Postgres","Server","Settings","borrow","borrow","borrow","borrow","borrow_mut","borrow_mut","borrow_mut","borrow_mut","check_url","clone","clone","clone","clone","clone_into","clone_into","clone_into","clone_into","database","database_type","debug","deserialize","deserialize","deserialize","deserialize","domain","eq","equivalent","fmt","fmt","fmt","fmt","fmt","from","from","from","from","from_url","get_ip","init","into","into","into","into","ip","new","pages","pool","port","serialize","server","source_code","to_owned","to_owned","to_owned","to_owned","to_string","try_from","try_from","try_from","try_from","try_into","try_into","try_into","try_into","type_id","type_id","type_id","type_id","url","vzip","vzip","vzip","vzip","workers"],"q":["pages","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","pages::ctx","","","","","","","","","","","","","","","","pages::db","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","pages::db::ConnectionOptions","","pages::db::Login","","pages::deploy","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","pages::deploy::routes","","","","","","","","","","","","pages::errors","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","pages::errors::ServiceError","","","","","","","","","","","","pages::git","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","pages::git::ContentType","","pages::meta","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","pages::meta::routes","","","","","","","","","","","","pages::page","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","pages::preview","","","","","","","","","","","","","","","pages::routes","","","","","","","","","","","","","","","pages::serve","","","","","","","","","","","","","pages::serve::routes","","","","","","","","","","","pages::settings","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","",""],"d":["","","","","","run database migrations","","","","run server","","","","","","","","","","","","","","","","","","Represents all the ways a trait can fail using this crate","Returns the argument unchanged.","Returns the argument unchanged.","","","","","","","","Calls U::from(self).","Calls U::from(self).","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","Returns the argument unchanged.","Calls U::from(self).","","","","","","","","","Use an existing database pool","Connect to databse","","email as login","existing connection","","fresh connection","types of credentials used as identifiers during login","type encapsulating username and hashed password of a user","Data required to register a new user","data required to update them email of a user","username as login","","","","","","","","","","","","","","","","","","","","","","","","","","","","delete a user","","","","","","Optionally, email of new use","check if email exists","","","","","","","","","","","","","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","","get user email","get a user’s password","hashed password of new use","hashed password","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","map postgres errors to ServiceError types","map custom row not found error to DB error","","","","","","new email address of the user","","","","","register a new user","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","update a user’s email","update user’s password","update username","","username of new user","username of the user","username","check if username exists","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","","","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","Returns the argument unchanged.","","Calls U::from(self).","","","","","","","","","Account not found","","","","","when the a Repository URL configured for a page is already …","Email is taken","","","","","All non-specific errors are grouped under this category","The value you entered for url is not url“","when the a path configured for a page is already taken","when the a Secret configured for a page is already taken","Error data structure grouping various error subtypes","Generic result data structure","URL too long, maximum length can’t be greater then 2048 …","","Username is taken","website not found","","","","","","","","","","","","","","","","","","","","","","Returns the argument unchanged.","Returns the argument unchanged.","","Returns the argument unchanged.","","","","Returns the argument unchanged.","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","Deprecated represent non-executable files with the group …","Dir represent a Directory.","Empty is used as the GitFileMode of tree elements when …","Executable represents executable files.","","A FileMode represents the kind of tree entries used by …","Regular represent non-executable files.","Submodule represents git submodules. This mode has no …","Symlink represents symbolic links to files.","","Unsupported file mode","","","","","","","","","","","","","","","","","","","","","","","","","","","","","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","","","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","","","","Please note that this method expects path to not contain …","","","","","","","","","","","","","","","","","","","","","","","","","","","emmits build details of the bninary","","","","","Returns the argument unchanged.","Returns the argument unchanged.","","Calls U::from(self).","Calls U::from(self).","","","","","","","","","","","","","","","","","","","","Returns the argument unchanged.","","Calls U::from(self).","","","","","","","","","","","","","","","","","","","","","","Returns the argument unchanged.","","","","Calls U::from(self).","","","","","","","","","","","","","","","","","","","","Returns the argument unchanged.","","Calls U::from(self).","","","","","","","","","","","","Returns the argument unchanged.","Calls U::from(self).","","","","","","","","","","","","Returns the argument unchanged.","","Calls U::from(self).","","","","","","","","","","","","Returns the argument unchanged.","Calls U::from(self).","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","","","","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","",""],"i":[0,0,0,0,0,1,0,0,0,1,0,0,0,2,2,1,1,2,1,2,1,2,0,3,0,3,0,0,2,1,2,1,2,1,0,0,1,2,1,2,2,0,0,0,3,0,0,0,0,3,0,0,3,2,1,2,1,2,1,2,1,2,1,2,1,0,0,4,4,4,4,4,4,4,4,4,4,4,4,4,4,5,0,0,0,6,7,0,7,0,0,0,0,6,7,5,8,9,10,11,6,12,7,5,8,9,10,11,6,12,9,10,11,6,12,9,10,11,6,12,7,9,10,11,6,12,8,10,9,10,11,6,12,10,11,6,12,10,11,6,12,7,5,8,9,10,11,6,12,0,9,9,10,12,7,5,8,9,10,11,6,12,0,0,9,10,11,6,12,11,0,9,9,8,9,10,11,6,12,9,10,11,6,12,7,5,8,9,10,11,6,12,7,5,8,9,10,11,6,12,7,5,8,9,10,11,6,12,9,9,9,8,10,11,12,9,7,5,8,9,10,11,6,12,13,14,15,16,0,0,0,17,18,19,20,21,17,18,19,20,21,17,17,19,20,17,19,20,20,0,17,19,20,19,20,19,20,0,17,19,20,17,18,19,20,21,20,20,17,18,19,20,21,19,20,18,21,20,0,17,19,17,19,20,0,17,19,20,17,18,19,20,21,17,18,19,20,21,17,18,19,20,21,0,17,18,19,20,21,0,22,22,22,22,22,22,22,22,22,22,22,23,24,25,25,25,0,25,25,25,0,0,25,25,25,25,25,25,0,0,25,25,25,25,23,24,25,26,23,24,25,26,26,23,24,25,26,25,23,23,24,24,25,25,26,23,24,25,25,25,25,25,26,23,24,25,26,25,26,23,24,25,25,23,24,25,23,24,25,26,23,24,25,26,23,24,25,26,23,24,25,26,27,28,29,30,31,32,33,34,35,27,28,29,36,0,37,37,37,37,0,0,37,37,37,36,37,37,38,36,37,38,36,36,37,38,36,37,38,36,38,36,37,38,36,37,38,36,38,37,38,36,37,37,37,37,38,36,36,37,37,38,36,38,38,36,0,0,0,36,37,38,36,37,38,36,37,37,38,36,37,38,36,37,38,36,39,40,0,41,42,41,42,0,41,41,41,41,41,42,41,41,42,42,0,41,0,41,41,41,42,41,42,41,42,41,41,42,0,43,43,43,43,43,43,43,43,43,43,43,0,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,0,45,45,45,45,45,45,45,45,45,45,45,45,45,45,0,0,46,46,46,46,46,46,46,46,0,46,46,46,46,47,47,0,47,0,47,47,0,0,47,47,47,47,0,48,48,48,48,48,48,48,48,48,48,0,0,49,0,0,50,49,51,3,50,49,51,3,3,50,49,51,3,50,49,51,3,3,51,3,50,49,51,3,50,49,49,50,49,49,51,3,50,49,51,3,49,50,3,50,49,51,3,50,3,3,51,50,49,3,3,50,49,51,3,49,50,49,51,3,50,49,51,3,50,49,51,3,51,50,49,51,3,50],"f":[null,null,null,null,null,null,null,null,null,null,null,null,null,[[["command",6]],["command",6]],[[["command",6]],["command",6]],[[["command",6]],["command",6]],[[["command",6]],["command",6]],[[["",0]],["",0]],[[["",0]],["",0]],[[["",0]],["",0]],[[["",0]],["",0]],null,null,null,null,null,null,null,[[]],[[]],[[["argmatches",3]],["result",4,[["cli",3],["error",3]]]],[[["argmatches",3]],["result",4,[["commands",4],["error",3]]]],[[["argmatches",3]],["result",4,[["cli",3],["error",3]]]],[[["argmatches",3]],["result",4,[["commands",4],["error",3]]]],[[],["jsonconfig",3]],null,[[["str",0]],["bool",0]],[[]],[[]],[[],["command",6]],[[],["command",6]],[[],["result",6]],null,null,null,null,null,null,[[["settings",3],["appctx",6]],["future",8]],null,[[["serviceconfig",3]]],null,null,[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[["",0]],["typeid",3]],[[["",0]],["typeid",3]],[[["cli",3],["argmatches",3]],["result",4,[["error",3]]]],[[["commands",4],["argmatches",3]],["result",4,[["error",3]]]],[[["cli",3],["argmatches",3]],["result",4,[["error",3]]]],[[["commands",4],["argmatches",3]],["result",4,[["error",3]]]],[[]],[[]],null,null,[[["",0]],["",0]],[[["",0]],["",0]],[[["ctx",3]],["ctx",3]],[[["",0],["",0]]],null,[[]],[[]],[[["settings",3]],["future",8]],null,[[["",0]]],[[],["result",4]],[[],["result",4]],[[["",0]],["typeid",3]],[[]],null,null,null,null,null,null,null,null,null,null,null,null,null,[[["",0]],["",0]],[[["",0]],["",0]],[[["",0]],["",0]],[[["",0]],["",0]],[[["",0]],["",0]],[[["",0]],["",0]],[[["",0]],["",0]],[[["",0]],["",0]],[[["",0]],["",0]],[[["",0]],["",0]],[[["",0]],["",0]],[[["",0]],["",0]],[[["",0]],["",0]],[[["",0]],["",0]],[[["",0]],["",0]],[[["",0]],["",0]],[[["database",3]],["database",3]],[[["register",3]],["register",3]],[[["updateemail",3]],["updateemail",3]],[[["login",4]],["login",4]],[[["namehash",3]],["namehash",3]],[[["",0],["",0]]],[[["",0],["",0]]],[[["",0],["",0]]],[[["",0],["",0]]],[[["",0],["",0]]],[[["connectionoptions",4]],["future",8]],[[["database",3],["str",0]],["future",8]],[[],["result",4,[["register",3]]]],[[],["result",4,[["updateemail",3]]]],[[],["result",4,[["login",4]]]],[[],["result",4,[["namehash",3]]]],null,null,[[["database",3],["str",0]],["future",8]],[[["register",3],["register",3]],["bool",0]],[[["updateemail",3],["updateemail",3]],["bool",0]],[[["login",4],["login",4]],["bool",0]],[[["namehash",3],["namehash",3]],["bool",0]],[[["",0],["",0]],["bool",0]],[[["",0],["",0]],["bool",0]],[[["",0],["",0]],["bool",0]],[[["",0],["",0]],["bool",0]],[[["register",3],["formatter",3]],["result",6]],[[["updateemail",3],["formatter",3]],["result",6]],[[["login",4],["formatter",3]],["result",6]],[[["namehash",3],["formatter",3]],["result",6]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[["settings",3]],["future",8]],[[["database",3],["str",0]],["future",8]],[[["database",3],["login",4]],["future",8]],null,null,[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[["error",4]],["serviceerror",4]],[[["error",4],["serviceerror",4]],["serviceerror",4]],[[["database",3]],["future",8]],[[["register",3],["register",3]],["bool",0]],[[["updateemail",3],["updateemail",3]],["bool",0]],[[["login",4],["login",4]],["bool",0]],[[["namehash",3],["namehash",3]],["bool",0]],null,[[],["offsetdatetime",3]],[[["database",3]],["future",8]],null,null,[[["database",3],["register",3]],["future",8]],[[["register",3]],["result",4]],[[["updateemail",3]],["result",4]],[[["login",4]],["result",4]],[[["namehash",3]],["result",4]],[[["",0]]],[[["",0]]],[[["",0]]],[[["",0]]],[[["",0]]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[["",0]],["typeid",3]],[[["",0]],["typeid",3]],[[["",0]],["typeid",3]],[[["",0]],["typeid",3]],[[["",0]],["typeid",3]],[[["",0]],["typeid",3]],[[["",0]],["typeid",3]],[[["",0]],["typeid",3]],[[["database",3],["updateemail",3]],["future",8]],[[["database",3],["namehash",3]],["future",8]],[[["database",3],["str",0],["str",0]],["future",8]],null,null,null,null,[[["database",3],["str",0]],["future",8]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],null,null,null,null,null,null,null,[[["",0]],["",0]],[[["",0]],["",0]],[[["",0]],["",0]],[[["",0]],["",0]],[[["",0]],["",0]],[[["",0]],["",0]],[[["",0]],["",0]],[[["",0]],["",0]],[[["",0]],["",0]],[[["",0]],["",0]],null,[[["deployevent",3]],["deployevent",3]],[[["deploysecret",3]],["deploysecret",3]],[[["deployinfo",3]],["deployinfo",3]],[[["",0],["",0]]],[[["",0],["",0]]],[[["",0],["",0]]],null,null,[[],["result",4,[["deployevent",3]]]],[[],["result",4,[["deploysecret",3]]]],[[],["result",4,[["deployinfo",3]]]],[[["deploysecret",3],["deploysecret",3]],["bool",0]],[[["deployinfo",3],["deployinfo",3]],["bool",0]],[[["",0],["",0]],["bool",0]],[[["",0],["",0]],["bool",0]],[[["str",0],["appctx",6]],["option",4,[["page",3]]]],[[["deployevent",3],["formatter",3]],["result",6]],[[["deploysecret",3],["formatter",3]],["result",6]],[[["deployinfo",3],["formatter",3]],["result",6]],[[]],[[]],[[]],[[]],[[]],[[["page",3]],["result",4,[["deployinfo",3],["serviceerror",4]]]],null,[[]],[[]],[[]],[[]],[[]],[[["deploysecret",3],["deploysecret",3]],["bool",0]],[[["deployinfo",3],["deployinfo",3]],["bool",0]],[[["update",3],["appservice",3]]],[[["deploy_info",3],["appservice",3]]],null,null,null,null,[[["deployevent",3]],["result",4]],[[["deploysecret",3]],["result",4]],[[["deployinfo",3]],["result",4]],[[["serviceconfig",3]]],[[["",0]]],[[["",0]]],[[["",0]]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[["",0]],["typeid",3]],[[["",0]],["typeid",3]],[[["",0]],["typeid",3]],[[["",0]],["typeid",3]],[[["",0]],["typeid",3]],null,[[]],[[]],[[]],[[]],[[]],null,[[["",0]],["",0]],[[["",0]],["",0]],[[]],null,[[]],[[],["deploy",3]],[[],["result",4]],[[],["result",4]],[[["",0]],["typeid",3]],null,[[]],null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,[[["",0]],["",0]],[[["",0]],["",0]],[[["",0]],["",0]],[[["",0]],["",0]],[[["",0]],["",0]],[[["",0]],["",0]],[[["",0]],["",0]],[[["",0]],["",0]],[[],["result",4,[["errortoresponse",3]]]],[[["fserror",3],["fserror",3]],["bool",0]],[[["configerror",3],["configerror",3]],["bool",0]],[[["serviceerror",4],["serviceerror",4]],["bool",0]],null,[[["serviceerror",4]],["httpresponse",3]],[[["fserror",3],["formatter",3]],["result",6]],[[["fserror",3],["formatter",3]],["result",6]],[[["configerror",3],["formatter",3]],["result",6]],[[["configerror",3],["formatter",3]],["result",6]],[[["serviceerror",4],["formatter",3]],["result",6]],[[["serviceerror",4],["formatter",3]],["result",6]],[[["errortoresponse",3],["formatter",3]],["result",6]],[[]],[[]],[[["fserrorinner",3]],["serviceerror",4]],[[]],[[["giterror",3]],["serviceerror",4]],[[["parseerror",4]],["serviceerror",4]],[[["configerrorinner",4]],["serviceerror",4]],[[]],[[]],[[]],[[]],[[]],[[["serviceerror",4],["serviceerror",4]],["bool",0]],[[["errortoresponse",3]],["result",4]],[[["fserror",3]],["option",4,[["error",8]]]],[[["configerror",3]],["option",4,[["error",8]]]],[[["serviceerror",4]],["option",4,[["error",8]]]],[[["serviceerror",4]],["statuscode",3]],[[["",0]],["string",3]],[[["",0]],["string",3]],[[["",0]],["string",3]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[["",0]],["typeid",3]],[[["",0]],["typeid",3]],[[["",0]],["typeid",3]],[[["",0]],["typeid",3]],[[]],[[]],[[]],[[]],null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,[[["",0]],["",0]],[[["",0]],["",0]],[[["",0]],["",0]],[[["",0]],["",0]],[[["",0]],["",0]],[[["",0]],["",0]],[[["contenttype",4]],["vec",3,[["u8",0]]]],[[["gitfilemode",4]],["gitfilemode",4]],[[["fileinfo",3]],["fileinfo",3]],[[["contenttype",4]],["contenttype",4]],[[["",0],["",0]]],[[["",0],["",0]]],[[["",0],["",0]]],null,[[],["result",4,[["contenttype",4]]]],[[["gitfilemode",4],["gitfilemode",4]],["bool",0]],[[["fileinfo",3],["fileinfo",3]],["bool",0]],[[["contenttype",4],["contenttype",4]],["bool",0]],[[["",0],["",0]],["bool",0]],[[["",0],["",0]],["bool",0]],[[["",0],["",0]],["bool",0]],null,[[["gitfilemode",4],["formatter",3]],["result",6]],[[["fileinfo",3],["formatter",3]],["result",6]],[[["contenttype",4],["formatter",3]],["result",6]],[[["treeentry",3]],["gitfilemode",4]],[[["treeentry",3]],["gitfilemode",4]],[[["isize",0]],["gitfilemode",4]],[[]],[[]],[[]],[[["blob",3]],["contenttype",4]],[[],["gitfilemode",4]],[[]],[[]],[[]],null,[[["fileinfo",3],["fileinfo",3]],["bool",0]],[[["contenttype",4],["contenttype",4]],["bool",0]],[[["str",0],["str",0]],["result",4,[["fileinfo",3],["serviceerror",4]]]],[[["repository",3],["str",0],["tree",3]],["result",4,[["fileinfo",3],["serviceerror",4]]]],[[["str",0],["str",0],["str",0]],["result",4,[["fileinfo",3],["serviceerror",4]]]],[[["contenttype",4]],["result",4]],[[["",0]]],[[["",0]]],[[["",0]]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4,[["gitfilemode",4],["tryfromprimitiveerror",3,[["gitfilemode",4]]]]]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[["",0]],["typeid",3]],[[["",0]],["typeid",3]],[[["",0]],["typeid",3]],[[]],[[]],[[]],null,null,null,[[["",0]],["",0]],[[["",0]],["",0]],[[["",0]],["",0]],[[["",0]],["",0]],null,[[["builddetails",3]],["builddetails",3]],[[["",0],["",0]]],[[],["result",4,[["builddetails",3]]]],[[["builddetails",3],["formatter",3]],["result",6]],[[]],[[]],null,[[]],[[]],[[["build_details",3],["appservice",3]]],null,[[["builddetails",3]],["result",4]],[[["serviceconfig",3]]],null,[[["",0]]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[["",0]],["typeid",3]],[[["",0]],["typeid",3]],null,[[]],[[]],null,[[["",0]],["",0]],[[["",0]],["",0]],null,[[]],null,[[]],[[],["meta",3]],[[],["result",4]],[[],["result",4]],[[["",0]],["typeid",3]],[[]],null,[[["page",3],["repository",3],["str",0]],["result",4,[["serviceerror",4]]]],[[["",0]],["",0]],[[["",0]],["",0]],null,[[["page",3]],["page",3]],[[["",0],["",0]]],[[["page",3]],["result",4,[["repository",3],["serviceerror",4]]]],[[["page",3],["repository",3]],["result",4,[["serviceerror",4]]]],[[],["result",4,[["page",3]]]],null,[[["page",3],["page",3]],["bool",0]],[[["",0],["",0]],["bool",0]],[[["repository",3],["reference",3],["annotatedcommit",3]],["result",4,[["serviceerror",4]]]],[[["page",3],["repository",3],["str",0]],["result",4,[["annotatedcommit",3],["serviceerror",4]]]],[[["page",3],["formatter",3]],["result",6]],[[]],[[["page",3],["repository",3]],["result",4,[["string",3],["serviceerror",4]]]],[[["repository",3]],["result",4,[["oid",3],["serviceerror",4]]]],[[["repository",3]],["result",4,[["remote",3],["serviceerror",4]]]],[[]],[[["page",3],["repository",3],["annotatedcommit",3],["str",0]],["result",4,[["serviceerror",4]]]],[[["page",3],["page",3]],["bool",0]],[[["repository",3],["annotatedcommit",3],["annotatedcommit",3]],["result",4,[["error",3]]]],[[["page",3]],["result",4,[["repository",3],["serviceerror",4]]]],null,null,null,[[["",0]]],[[],["result",4]],[[],["result",4]],[[["",0]],["typeid",3]],[[["page",3],["str",0]],["result",4,[["serviceerror",4]]]],[[]],null,null,[[["",0]],["",0]],[[["",0]],["",0]],null,[[["preview",3],["str",0]],["option",4,[["str",0]]]],[[]],[[["preview",3],["usize",0]],["string",3]],[[]],[[["appctx",6]],["preview",3]],null,[[],["result",4]],[[],["result",4]],[[["",0]],["typeid",3]],[[]],null,null,[[["",0]],["",0]],[[["",0]],["",0]],null,[[]],[[]],null,[[],["routes",3]],null,[[["serviceconfig",3]]],[[],["result",4]],[[],["result",4]],[[["",0]],["typeid",3]],[[]],[[["",0]],["",0]],[[["",0]],["",0]],[[["str",0],["appctx",6]],["option",4,[["page",3]]]],[[]],null,[[]],[[["index",3],["appservice",3]]],null,[[["serviceconfig",3]]],[[],["result",4]],[[],["result",4]],[[["",0]],["typeid",3]],[[]],null,[[["",0]],["",0]],[[["",0]],["",0]],null,[[]],[[]],[[],["serve",3]],[[],["result",4]],[[],["result",4]],[[["",0]],["typeid",3]],[[]],null,null,null,null,null,[[["",0]],["",0]],[[["",0]],["",0]],[[["",0]],["",0]],[[["",0]],["",0]],[[["",0]],["",0]],[[["",0]],["",0]],[[["",0]],["",0]],[[["",0]],["",0]],[[["settings",3]]],[[["server",3]],["server",3]],[[["dbtype",4]],["dbtype",4]],[[["database",3]],["database",3]],[[["settings",3]],["settings",3]],[[["",0],["",0]]],[[["",0],["",0]]],[[["",0],["",0]]],[[["",0],["",0]]],null,null,null,[[],["result",4,[["server",3]]]],[[],["result",4,[["dbtype",4]]]],[[],["result",4,[["database",3]]]],[[],["result",4,[["settings",3]]]],null,[[["dbtype",4],["dbtype",4]],["bool",0]],[[["",0],["",0]],["bool",0]],[[["server",3],["formatter",3]],["result",6]],[[["dbtype",4],["formatter",3]],["result",6]],[[["dbtype",4],["formatter",3]],["result",6]],[[["database",3],["formatter",3]],["result",6]],[[["settings",3],["formatter",3]],["result",6]],[[]],[[]],[[]],[[]],[[["url",3]],["result",4,[["dbtype",4],["configerror",4]]]],[[["server",3]],["string",3]],[[["settings",3]]],[[]],[[]],[[]],[[]],null,[[],["result",4,[["settings",3],["serviceerror",4]]]],null,null,null,[[["dbtype",4]],["result",4]],null,null,[[["",0]]],[[["",0]]],[[["",0]]],[[["",0]]],[[["",0]],["string",3]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[["",0]],["typeid",3]],[[["",0]],["typeid",3]],[[["",0]],["typeid",3]],[[["",0]],["typeid",3]],null,[[]],[[]],[[]],[[]],null],"p":[[4,"Commands"],[3,"Cli"],[3,"Settings"],[3,"Ctx"],[3,"Conn"],[4,"Login"],[4,"ConnectionOptions"],[3,"Fresh"],[3,"Database"],[3,"Register"],[3,"UpdateEmail"],[3,"NameHash"],[13,"Fresh"],[13,"Existing"],[13,"Username"],[13,"Email"],[3,"DeployEvent"],[3,"update"],[3,"DeploySecret"],[3,"DeployInfo"],[3,"deploy_info"],[3,"Deploy"],[3,"FSError"],[3,"ConfigError"],[4,"ServiceError"],[3,"ErrorToResponse"],[13,"PathTaken"],[13,"SecretTaken"],[13,"DuplicateRepositoryURL"],[13,"FSError"],[13,"UnauthorizedOperation"],[13,"BadRequest"],[13,"ConfigError"],[13,"GitError"],[13,"BranchNotFound"],[4,"ContentType"],[4,"GitFileMode"],[3,"FileInfo"],[13,"Binary"],[13,"Text"],[3,"BuildDetails"],[3,"build_details"],[3,"Meta"],[3,"Page"],[3,"Preview"],[3,"Routes"],[3,"index"],[3,"Serve"],[4,"DBType"],[3,"Server"],[3,"Database"]]}\ }'); if (typeof window !== 'undefined' && window.initSearch) {window.initSearch(searchIndex)}; if (typeof exports !== 'undefined') {exports.searchIndex = searchIndex}; diff --git a/source-files.js b/source-files.js index 0d85645..6236f93 100644 --- a/source-files.js +++ b/source-files.js @@ -1,3 +1,3 @@ var sourcesIndex = {}; -sourcesIndex["pages"] = {"name":"","files":["ctx.rs","deploy.rs","errors.rs","git.rs","main.rs","meta.rs","page.rs","preview.rs","routes.rs","serve.rs","settings.rs"]}; +sourcesIndex["pages"] = {"name":"","files":["ctx.rs","db.rs","deploy.rs","errors.rs","git.rs","main.rs","meta.rs","page.rs","preview.rs","routes.rs","serve.rs","settings.rs"]}; createSourceSidebar(); diff --git a/src/pages/ctx.rs.html b/src/pages/ctx.rs.html index a36e0d4..38c140f 100644 --- a/src/pages/ctx.rs.html +++ b/src/pages/ctx.rs.html @@ -34,6 +34,11 @@ 28 29 30 +31 +32 +33 +34 +35
/*
  * Copyright (C) 2022  Aravinth Manivannan <realaravinth@batsense.net>
  *
@@ -52,16 +57,21 @@
  */
 use std::sync::Arc;
 
+use crate::db::*;
 use crate::settings::Settings;
 
+pub type ArcCtx = Arc<Ctx>;
+
 #[derive(Clone)]
 pub struct Ctx {
     pub settings: Settings,
+    pub db: Database,
 }
 
 impl Ctx {
-    pub fn new(settings: Settings) -> Arc<Self> {
-        Arc::new(Self { settings })
+    pub async fn new(settings: Settings) -> Arc<Self> {
+        let db = get_db(&settings).await;
+        Arc::new(Self { settings, db })
     }
 }
 
diff --git a/src/pages/db.rs.html b/src/pages/db.rs.html new file mode 100644 index 0000000..4b20c3a --- /dev/null +++ b/src/pages/db.rs.html @@ -0,0 +1,923 @@ +db.rs - source +
1
+2
+3
+4
+5
+6
+7
+8
+9
+10
+11
+12
+13
+14
+15
+16
+17
+18
+19
+20
+21
+22
+23
+24
+25
+26
+27
+28
+29
+30
+31
+32
+33
+34
+35
+36
+37
+38
+39
+40
+41
+42
+43
+44
+45
+46
+47
+48
+49
+50
+51
+52
+53
+54
+55
+56
+57
+58
+59
+60
+61
+62
+63
+64
+65
+66
+67
+68
+69
+70
+71
+72
+73
+74
+75
+76
+77
+78
+79
+80
+81
+82
+83
+84
+85
+86
+87
+88
+89
+90
+91
+92
+93
+94
+95
+96
+97
+98
+99
+100
+101
+102
+103
+104
+105
+106
+107
+108
+109
+110
+111
+112
+113
+114
+115
+116
+117
+118
+119
+120
+121
+122
+123
+124
+125
+126
+127
+128
+129
+130
+131
+132
+133
+134
+135
+136
+137
+138
+139
+140
+141
+142
+143
+144
+145
+146
+147
+148
+149
+150
+151
+152
+153
+154
+155
+156
+157
+158
+159
+160
+161
+162
+163
+164
+165
+166
+167
+168
+169
+170
+171
+172
+173
+174
+175
+176
+177
+178
+179
+180
+181
+182
+183
+184
+185
+186
+187
+188
+189
+190
+191
+192
+193
+194
+195
+196
+197
+198
+199
+200
+201
+202
+203
+204
+205
+206
+207
+208
+209
+210
+211
+212
+213
+214
+215
+216
+217
+218
+219
+220
+221
+222
+223
+224
+225
+226
+227
+228
+229
+230
+231
+232
+233
+234
+235
+236
+237
+238
+239
+240
+241
+242
+243
+244
+245
+246
+247
+248
+249
+250
+251
+252
+253
+254
+255
+256
+257
+258
+259
+260
+261
+262
+263
+264
+265
+266
+267
+268
+269
+270
+271
+272
+273
+274
+275
+276
+277
+278
+279
+280
+281
+282
+283
+284
+285
+286
+287
+288
+289
+290
+291
+292
+293
+294
+295
+296
+297
+298
+299
+300
+301
+302
+303
+304
+305
+306
+307
+308
+309
+310
+311
+312
+313
+314
+315
+316
+317
+318
+319
+320
+321
+322
+323
+324
+325
+326
+327
+328
+329
+330
+331
+332
+333
+334
+335
+336
+337
+338
+339
+340
+341
+342
+343
+344
+345
+346
+347
+348
+349
+350
+351
+352
+353
+354
+355
+356
+357
+358
+359
+360
+361
+362
+363
+364
+365
+366
+367
+368
+369
+370
+371
+372
+373
+374
+375
+376
+377
+378
+379
+380
+381
+382
+383
+384
+385
+386
+387
+388
+389
+390
+391
+392
+393
+394
+395
+396
+397
+398
+399
+400
+401
+402
+403
+404
+405
+406
+407
+408
+409
+410
+411
+412
+413
+414
+415
+416
+417
+418
+419
+420
+421
+422
+423
+424
+425
+426
+427
+428
+429
+430
+431
+432
+433
+434
+435
+436
+437
+438
+439
+440
+441
+442
+443
+444
+445
+446
+447
+448
+449
+450
+451
+452
+453
+454
+455
+456
+457
+
/*
+ * Copyright (C) 2022  Aravinth Manivannan <realaravinth@batsense.net>
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as
+ * published by the Free Software Foundation, either version 3 of the
+ * License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program.  If not, see <https://www.gnu.org/licenses/>.
+ */
+use std::str::FromStr;
+
+use serde::{Deserialize, Serialize};
+use sqlx::postgres::PgPoolOptions;
+use sqlx::types::time::OffsetDateTime;
+//use sqlx::types::Json;
+use sqlx::ConnectOptions;
+use sqlx::PgPool;
+
+use crate::errors::*;
+
+/// Connect to databse
+pub enum ConnectionOptions {
+    /// fresh connection
+    Fresh(Fresh),
+    /// existing connection
+    Existing(Conn),
+}
+
+/// Use an existing database pool
+pub struct Conn(pub PgPool);
+
+pub struct Fresh {
+    pub pool_options: PgPoolOptions,
+    pub disable_logging: bool,
+    pub url: String,
+}
+
+impl ConnectionOptions {
+    async fn connect(self) -> ServiceResult<Database> {
+        let pool = match self {
+            Self::Fresh(fresh) => {
+                let mut connect_options =
+                    sqlx::postgres::PgConnectOptions::from_str(&fresh.url).unwrap();
+                if fresh.disable_logging {
+                    connect_options.disable_statement_logging();
+                }
+                sqlx::postgres::PgConnectOptions::from_str(&fresh.url)
+                    .unwrap()
+                    .disable_statement_logging();
+                fresh
+                    .pool_options
+                    .connect_with(connect_options)
+                    .await
+                    .unwrap()
+                //.map_err(|e| ServiceError::ServiceError(Box::new(e)))?
+            }
+
+            Self::Existing(conn) => conn.0,
+        };
+        Ok(Database { pool })
+    }
+}
+
+#[derive(Clone)]
+pub struct Database {
+    pub pool: PgPool,
+}
+
+impl Database {
+    pub async fn migrate(&self) -> ServiceResult<()> {
+        sqlx::migrate!("./migrations/")
+            .run(&self.pool)
+            .await
+            .unwrap();
+        //.map_err(|e| ServiceError::ServiceError(Box::new(e)))?;
+        Ok(())
+    }
+
+    pub async fn ping(&self) -> bool {
+        use sqlx::Connection;
+
+        if let Ok(mut con) = self.pool.acquire().await {
+            con.ping().await.is_ok()
+        } else {
+            false
+        }
+    }
+
+    /// register a new user
+    pub async fn register(&self, p: &Register<'_>) -> ServiceResult<()> {
+        sqlx::query!(
+            "insert into librepages_users
+            (name , password, email) values ($1, $2, $3)",
+            &p.username,
+            &p.hash,
+            &p.email,
+        )
+        .execute(&self.pool)
+        .await
+        .map_err(map_register_err)?;
+        Ok(())
+    }
+
+    /// delete a user
+    pub async fn delete_user(&self, username: &str) -> ServiceResult<()> {
+        sqlx::query!("DELETE FROM librepages_users WHERE name = ($1)", username)
+            .execute(&self.pool)
+            .await
+            .map_err(|e| map_row_not_found_err(e, ServiceError::AccountNotFound))?;
+        Ok(())
+    }
+
+    /// check if username exists
+    pub async fn username_exists(&self, username: &str) -> ServiceResult<bool> {
+        let res = sqlx::query!(
+            "SELECT EXISTS (SELECT 1 from librepages_users WHERE name = $1)",
+            username,
+        )
+        .fetch_one(&self.pool)
+        .await
+        .map_err(map_register_err)?;
+
+        let mut resp = false;
+        if let Some(x) = res.exists {
+            resp = x;
+        }
+
+        Ok(resp)
+    }
+
+    /// get user email
+    pub async fn get_email(&self, username: &str) -> ServiceResult<String> {
+        struct Email {
+            email: String,
+        }
+
+        let res = sqlx::query_as!(
+            Email,
+            "SELECT email FROM librepages_users WHERE name = $1",
+            username
+        )
+        .fetch_one(&self.pool)
+        .await
+        .map_err(|e| map_row_not_found_err(e, ServiceError::AccountNotFound))?;
+        Ok(res.email)
+    }
+
+    /// check if email exists
+    pub async fn email_exists(&self, email: &str) -> ServiceResult<bool> {
+        let res = sqlx::query!(
+            "SELECT EXISTS (SELECT 1 from librepages_users WHERE email = $1)",
+            email
+        )
+        .fetch_one(&self.pool)
+        .await
+        .map_err(map_register_err)?;
+
+        let mut resp = false;
+        if let Some(x) = res.exists {
+            resp = x;
+        }
+
+        Ok(resp)
+    }
+
+    /// update a user's email
+    pub async fn update_email(&self, p: &UpdateEmail<'_>) -> ServiceResult<()> {
+        sqlx::query!(
+            "UPDATE librepages_users set email = $1
+            WHERE name = $2",
+            &p.new_email,
+            &p.username,
+        )
+        .execute(&self.pool)
+        .await
+        .map_err(|e| map_row_not_found_err(e, ServiceError::AccountNotFound))?;
+
+        Ok(())
+    }
+
+    /// get a user's password
+    pub async fn get_password(&self, l: &Login<'_>) -> ServiceResult<NameHash> {
+        struct Password {
+            name: String,
+            password: String,
+        }
+
+        let rec = match l {
+            Login::Username(u) => sqlx::query_as!(
+                Password,
+                r#"SELECT name, password  FROM librepages_users WHERE name = ($1)"#,
+                u,
+            )
+            .fetch_one(&self.pool)
+            .await
+            .map_err(|e| map_row_not_found_err(e, ServiceError::AccountNotFound))?,
+            Login::Email(e) => sqlx::query_as!(
+                Password,
+                r#"SELECT name, password  FROM librepages_users WHERE email = ($1)"#,
+                e,
+            )
+            .fetch_one(&self.pool)
+            .await
+            .map_err(|e| map_row_not_found_err(e, ServiceError::AccountNotFound))?,
+        };
+
+        let res = NameHash {
+            hash: rec.password,
+            username: rec.name,
+        };
+
+        Ok(res)
+    }
+
+    /// update user's password
+    async fn update_password(&self, p: &NameHash) -> ServiceResult<()> {
+        sqlx::query!(
+            "UPDATE librepages_users set password = $1
+            WHERE name = $2",
+            &p.hash,
+            &p.username,
+        )
+        .execute(&self.pool)
+        .await
+        .map_err(|e| map_row_not_found_err(e, ServiceError::AccountNotFound))?;
+
+        Ok(())
+    }
+
+    /// update username
+    async fn update_username(&self, current: &str, new: &str) -> ServiceResult<()> {
+        sqlx::query!(
+            "UPDATE librepages_users set name = $1
+            WHERE name = $2",
+            new,
+            current,
+        )
+        .execute(&self.pool)
+        .await
+        .map_err(|e| map_row_not_found_err(e, ServiceError::AccountNotFound))?;
+
+        Ok(())
+    }
+}
+
+#[derive(Clone, Debug, Deserialize, Serialize, Eq, PartialEq)]
+/// Data required to register a new user
+pub struct Register<'a> {
+    /// username of new user
+    pub username: &'a str,
+    /// hashed password of new use
+    pub hash: &'a str,
+    /// Optionally, email of new use
+    pub email: &'a str,
+}
+
+#[derive(Clone, Debug, Deserialize, Serialize, Eq, PartialEq)]
+/// data required to update them email of a user
+pub struct UpdateEmail<'a> {
+    /// username of the user
+    pub username: &'a str,
+    /// new email address of the user
+    pub new_email: &'a str,
+}
+
+#[derive(Clone, Debug, Deserialize, Serialize, Eq, PartialEq)]
+/// types of credentials used as identifiers during login
+pub enum Login<'a> {
+    /// username as login
+    Username(&'a str),
+    /// email as login
+    Email(&'a str),
+}
+
+#[derive(Clone, Debug, Deserialize, Serialize, Eq, PartialEq)]
+/// type encapsulating username and hashed password of a user
+pub struct NameHash {
+    /// username
+    pub username: String,
+    /// hashed password
+    pub hash: String,
+}
+
+fn now_unix_time_stamp() -> OffsetDateTime {
+    OffsetDateTime::now_utc()
+}
+
+pub async fn get_db(settings: &crate::settings::Settings) -> Database {
+    let pool_options = PgPoolOptions::new().max_connections(settings.database.pool);
+    ConnectionOptions::Fresh(Fresh {
+        pool_options,
+        url: settings.database.url.clone(),
+        disable_logging: !settings.debug,
+    })
+    .connect()
+    .await
+    .unwrap()
+}
+
+/// map custom row not found error to DB error
+pub fn map_row_not_found_err(e: sqlx::Error, row_not_found: ServiceError) -> ServiceError {
+    if let sqlx::Error::RowNotFound = e {
+        row_not_found
+    } else {
+        map_register_err(e)
+    }
+}
+
+/// map postgres errors to [ServiceError](ServiceError) types
+fn map_register_err(e: sqlx::Error) -> ServiceError {
+    use sqlx::Error;
+    use std::borrow::Cow;
+
+    if let Error::Database(err) = e {
+        if err.code() == Some(Cow::from("23505")) {
+            let msg = err.message();
+            println!("{}", msg);
+            if msg.contains("librepages_users_name_key") {
+                ServiceError::UsernameTaken
+            } else if msg.contains("librepages_users_email_key") {
+                ServiceError::EmailTaken
+            } else {
+                log::error!("{}", msg);
+                ServiceError::InternalServerError
+            }
+        } else {
+            ServiceError::InternalServerError
+        }
+    } else {
+        ServiceError::InternalServerError
+    }
+}
+
+#[cfg(test)]
+mod tests {
+    use super::*;
+    use crate::settings::Settings;
+
+    #[actix_rt::test]
+    async fn db_works() {
+        let settings = Settings::new().unwrap();
+        let pool_options = PgPoolOptions::new().max_connections(1);
+        let db = ConnectionOptions::Fresh(Fresh {
+            pool_options,
+            url: settings.database.url.clone(),
+            disable_logging: !settings.debug,
+        })
+        .connect()
+        .await
+        .unwrap();
+        assert!(db.ping().await);
+
+        const EMAIL: &str = "postgresuser@foo.com";
+        const EMAIL2: &str = "postgresuser2@foo.com";
+        const NAME: &str = "postgresuser";
+        const PASSWORD: &str = "pasdfasdfasdfadf";
+
+        db.migrate().await.unwrap();
+        let p = super::Register {
+            username: NAME,
+            email: EMAIL,
+            hash: PASSWORD,
+        };
+
+        if db.username_exists(p.username).await.unwrap() {
+            db.delete_user(p.username).await.unwrap();
+            assert!(
+                !db.username_exists(p.username).await.unwrap(),
+                "user is deleted so username shouldn't exist"
+            );
+        }
+
+        db.register(&p).await.unwrap();
+
+        assert!(matches!(
+            db.register(&p).await,
+            Err(ServiceError::UsernameTaken)
+        ));
+
+        // testing get_password
+
+        // with username
+        let name_hash = db.get_password(&Login::Username(p.username)).await.unwrap();
+        assert_eq!(name_hash.hash, p.hash, "user password matches");
+
+        assert_eq!(name_hash.username, p.username, "username matches");
+
+        // with email
+        let mut name_hash = db.get_password(&Login::Email(p.email)).await.unwrap();
+        assert_eq!(name_hash.hash, p.hash, "user password matches");
+        assert_eq!(name_hash.username, p.username, "username matches");
+
+        // testing get_email
+        assert_eq!(db.get_email(p.username).await.unwrap(), p.email);
+
+        // testing email exists
+        assert!(
+            db.email_exists(p.email).await.unwrap(),
+            "user is registered so email should exist"
+        );
+        assert!(
+            db.username_exists(p.username).await.unwrap(),
+            "user is registered so username should exist"
+        );
+
+        // update password test. setting password = username
+        name_hash.hash = name_hash.username.clone();
+        db.update_password(&name_hash).await.unwrap();
+
+        let name_hash = db.get_password(&Login::Username(p.username)).await.unwrap();
+        assert_eq!(
+            name_hash.hash, p.username,
+            "user password matches with changed value"
+        );
+        assert_eq!(name_hash.username, p.username, "username matches");
+
+        // update username to p.email
+        assert!(
+            !db.username_exists(p.email).await.unwrap(),
+            "user with p.email doesn't exist. pre-check to update username to p.email"
+        );
+        db.update_username(p.username, p.email).await.unwrap();
+        assert!(
+            db.username_exists(p.email).await.unwrap(),
+            "user with p.email exist post-update"
+        );
+
+        // testing update email
+        let update_email = UpdateEmail {
+            username: p.username,
+            new_email: EMAIL2,
+        };
+        db.update_email(&update_email).await.unwrap();
+        println!(
+            "null user email: {}",
+            db.email_exists(p.email).await.unwrap()
+        );
+        assert!(
+            db.email_exists(p.email).await.unwrap(),
+            "user was with empty email but email is set; so email should exist"
+        );
+
+        // deleting user
+        db.delete_user(p.email).await.unwrap();
+        assert!(
+            !db.username_exists(p.email).await.unwrap(),
+            "user is deleted so username shouldn't exist"
+        );
+    }
+}
+
+
+ \ No newline at end of file diff --git a/src/pages/deploy.rs.html b/src/pages/deploy.rs.html index 9b21001..602e679 100644 --- a/src/pages/deploy.rs.html +++ b/src/pages/deploy.rs.html @@ -250,7 +250,7 @@ None } -#[my_codegen::post(path = "crate::V1_API_ROUTES.deploy.update")] +#[actix_web_codegen_const_routes::post(path = "crate::V1_API_ROUTES.deploy.update")] async fn update(payload: web::Json<DeployEvent>, ctx: AppCtx) -> ServiceResult<impl Responder> { if let Some(page) = find_page(&payload.secret, &ctx) { let (tx, rx) = oneshot::channel(); @@ -295,7 +295,7 @@ } } -#[my_codegen::post(path = "crate::V1_API_ROUTES.deploy.info")] +#[actix_web_codegen_const_routes::post(path = "crate::V1_API_ROUTES.deploy.info")] async fn deploy_info( payload: web::Json<DeploySecret>, ctx: AppCtx, diff --git a/src/pages/errors.rs.html b/src/pages/errors.rs.html index 218f28d..672371b 100644 --- a/src/pages/errors.rs.html +++ b/src/pages/errors.rs.html @@ -193,6 +193,21 @@ 187 188 189 +190 +191 +192 +193 +194 +195 +196 +197 +198 +199 +200 +201 +202 +203 +204
/*
  * Copyright (C) 2022  Aravinth Manivannan <realaravinth@batsense.net>
  *
@@ -209,8 +224,9 @@
  * You should have received a copy of the GNU Affero General Public License
  * along with this program.  If not, see <https://www.gnu.org/licenses/>.
  */
-//! represents all the ways a trait can fail using this crate
+//! Represents all the ways a trait can fail using this crate
 use std::convert::From;
+use std::error::Error as StdError;
 use std::io::Error as FSErrorInner;
 use std::sync::Arc;
 
@@ -321,6 +337,16 @@
 
     #[display(fmt = "Branch {} not found", _0)]
     BranchNotFound(#[error(not(source))] String),
+
+    /// Username is taken
+    #[display(fmt = "Username is taken")]
+    UsernameTaken,
+    /// Email is taken
+    #[display(fmt = "Email is taken")]
+    EmailTaken,
+    /// Account not found
+    #[display(fmt = "Account not found")]
+    AccountNotFound,
 }
 
 impl From<ParseError> for ServiceError {
@@ -379,6 +405,10 @@
             ServiceError::BadRequest(_) => StatusCode::BAD_REQUEST,
             ServiceError::GitError(_) => StatusCode::BAD_REQUEST,
             ServiceError::BranchNotFound(_) => StatusCode::CONFLICT,
+
+            ServiceError::EmailTaken => StatusCode::BAD_REQUEST,
+            ServiceError::UsernameTaken => StatusCode::BAD_REQUEST,
+            ServiceError::AccountNotFound => StatusCode::NOT_FOUND,
         }
     }
 }
diff --git a/src/pages/main.rs.html b/src/pages/main.rs.html
index 251a233..96515cc 100644
--- a/src/pages/main.rs.html
+++ b/src/pages/main.rs.html
@@ -110,6 +110,55 @@
 104
 105
 106
+107
+108
+109
+110
+111
+112
+113
+114
+115
+116
+117
+118
+119
+120
+121
+122
+123
+124
+125
+126
+127
+128
+129
+130
+131
+132
+133
+134
+135
+136
+137
+138
+139
+140
+141
+142
+143
+144
+145
+146
+147
+148
+149
+150
+151
+152
+153
+154
+155
 
/*
  * Copyright (C) 2022  Aravinth Manivannan <realaravinth@batsense.net>
  *
@@ -133,9 +182,11 @@
     error::InternalError, http::StatusCode, middleware as actix_middleware, web::Data as WebData,
     web::JsonConfig, App, HttpServer,
 };
+use clap::{Parser, SubCommand, Subcommand};
 use log::info;
 
 mod ctx;
+mod db;
 mod deploy;
 mod errors;
 mod git;
@@ -148,6 +199,7 @@
 #[cfg(test)]
 mod tests;
 
+use ctx::Ctx;
 pub use routes::ROUTES as V1_API_ROUTES;
 pub use settings::Settings;
 
@@ -159,30 +211,76 @@
 pub const PKG_DESCRIPTION: &str = env!("CARGO_PKG_DESCRIPTION");
 pub const PKG_HOMEPAGE: &str = env!("CARGO_PKG_HOMEPAGE");
 
-pub type AppCtx = WebData<Arc<ctx::Ctx>>;
+pub type AppCtx = WebData<ctx::ArcCtx>;
+
+//#[cfg(not(tarpaulin_include))]
+//#[actix_web::main]
+//async fn main() -> std::io::Result<()> {
+//    {
+//        const LOG_VAR: &str = "RUST_LOG";
+//        if env::var(LOG_VAR).is_err() {
+//            env::set_var("RUST_LOG", "info");
+//        }
+//    }
+//
+//    let settings = Settings::new().unwrap();
+//    let ctx = WebData::new(ctx::Ctx::new(settings.clone()));
+//
+//    pretty_env_logger::init();
+//
+//    info!(
+//        "{}: {}.\nFor more information, see: {}\nBuild info:\nVersion: {} commit: {}",
+//        PKG_NAME, PKG_DESCRIPTION, PKG_HOMEPAGE, VERSION, GIT_COMMIT_HASH
+//    );
+//
+//
+//}
+
+#[derive(Parser)]
+#[clap(author, version, about, long_about = None)]
+struct Cli {
+    #[clap(subcommand)]
+    command: Commands,
+}
+
+#[derive(Subcommand)]
+enum Commands {
+    /// run database migrations
+    Migrate,
+
+    /// run server
+    Serve,
+}
 
-#[cfg(not(tarpaulin_include))]
 #[actix_web::main]
+#[cfg(not(tarpaulin_include))]
 async fn main() -> std::io::Result<()> {
-    {
-        const LOG_VAR: &str = "RUST_LOG";
-        if env::var(LOG_VAR).is_err() {
-            env::set_var("RUST_LOG", "info");
-        }
-    }
-
-    let settings = Settings::new().unwrap();
-    let ctx = WebData::new(ctx::Ctx::new(settings.clone()));
+    env::set_var("RUST_LOG", "info");
 
     pretty_env_logger::init();
 
+    let cli = Cli::parse();
+
     info!(
         "{}: {}.\nFor more information, see: {}\nBuild info:\nVersion: {} commit: {}",
         PKG_NAME, PKG_DESCRIPTION, PKG_HOMEPAGE, VERSION, GIT_COMMIT_HASH
     );
 
-    info!("Starting server on: http://{}", settings.server.get_ip());
+    let settings = Settings::new().unwrap();
+    let ctx = Ctx::new(settings.clone()).await;
+    let ctx = actix_web::web::Data::new(ctx);
 
+    match &cli.command {
+        Commands::Migrate => ctx.db.migrate().await.unwrap(),
+        Commands::Serve => serve(settings, ctx).await.unwrap(),
+    }
+    Ok(())
+}
+
+async fn serve(settings: Settings, ctx: AppCtx) -> std::io::Result<()> {
+    let ip = settings.server.get_ip();
+
+    info!("Starting server on: http://{}", settings.server.get_ip());
     HttpServer::new(move || {
         App::new()
             .wrap(actix_middleware::Logger::default())
diff --git a/src/pages/meta.rs.html b/src/pages/meta.rs.html
index 3b3d05a..7129c4b 100644
--- a/src/pages/meta.rs.html
+++ b/src/pages/meta.rs.html
@@ -124,7 +124,7 @@
 }
 
 /// emmits build details of the bninary
-#[my_codegen::get(path = "crate::V1_API_ROUTES.meta.build_details")]
+#[actix_web_codegen_const_routes::get(path = "crate::V1_API_ROUTES.meta.build_details")]
 async fn build_details(ctx: AppCtx) -> impl Responder {
     let build = BuildDetails {
         version: VERSION,
diff --git a/src/pages/serve.rs.html b/src/pages/serve.rs.html
index 680edef..87c92c6 100644
--- a/src/pages/serve.rs.html
+++ b/src/pages/serve.rs.html
@@ -169,7 +169,7 @@
     None
 }
 
-#[my_codegen::get(path = "crate::V1_API_ROUTES.serve.catch_all")]
+#[actix_web_codegen_const_routes::get(path = "crate::V1_API_ROUTES.serve.catch_all")]
 async fn index(req: HttpRequest, ctx: AppCtx) -> ServiceResult<impl Responder> {
     let c = req.connection_info();
     let mut host = c.host();
diff --git a/src/pages/settings.rs.html b/src/pages/settings.rs.html
index cee24af..ebea973 100644
--- a/src/pages/settings.rs.html
+++ b/src/pages/settings.rs.html
@@ -141,6 +141,77 @@
 135
 136
 137
+138
+139
+140
+141
+142
+143
+144
+145
+146
+147
+148
+149
+150
+151
+152
+153
+154
+155
+156
+157
+158
+159
+160
+161
+162
+163
+164
+165
+166
+167
+168
+169
+170
+171
+172
+173
+174
+175
+176
+177
+178
+179
+180
+181
+182
+183
+184
+185
+186
+187
+188
+189
+190
+191
+192
+193
+194
+195
+196
+197
+198
+199
+200
+201
+202
+203
+204
+205
+206
+207
+208
 
/*
  * Copyright (C) 2022  Aravinth Manivannan <realaravinth@batsense.net>
  *
@@ -161,7 +232,8 @@
 use std::path::Path;
 use std::sync::Arc;
 
-use config::{Config, Environment, File};
+use config::{Config, ConfigError, Environment, File};
+use derive_more::Display;
 #[cfg(not(test))]
 use log::{error, warn};
 
@@ -169,6 +241,7 @@
 use std::{println as warn, println as error};
 
 use serde::Deserialize;
+use serde::Serialize;
 use url::Url;
 
 use crate::errors::*;
@@ -189,11 +262,39 @@
     }
 }
 
+#[derive(Deserialize, Serialize, Display, Eq, PartialEq, Clone, Debug)]
+#[serde(rename_all = "lowercase")]
+pub enum DBType {
+    #[display(fmt = "postgres")]
+    Postgres,
+    //    #[display(fmt = "maria")]
+    //    Maria,
+}
+
+impl DBType {
+    fn from_url(url: &Url) -> Result<Self, ConfigError> {
+        match url.scheme() {
+            //        "mysql" => Ok(Self::Maria),
+            "postgres" => Ok(Self::Postgres),
+            _ => Err(ConfigError::Message("Unknown database type".into())),
+        }
+    }
+}
+
+#[derive(Debug, Clone, Deserialize)]
+pub struct Database {
+    pub url: String,
+    pub pool: u32,
+    pub database_type: DBType,
+}
+
 #[derive(Debug, Clone, Deserialize)]
 pub struct Settings {
+    pub debug: bool,
     pub server: Server,
     pub source_code: String,
     pub pages: Vec<Arc<Page>>,
+    pub database: Database,
 }
 
 #[cfg(not(tarpaulin_include))]
@@ -227,15 +328,56 @@
 
         s = s.add_source(Environment::with_prefix("PAGES").separator("__"));
 
-        let mut settings = s.build()?.try_deserialize::<Settings>()?;
-        settings.check_url();
         match env::var("PORT") {
             Ok(val) => {
-                settings.server.port = val.parse().unwrap();
+                s = s.set_override("server.port", val).unwrap();
+                //settings.server.port = val.parse().unwrap();
             }
             Err(e) => warn!("couldn't interpret PORT: {}", e),
         }
 
+        if let Ok(val) = env::var("DATABASE_URL") {
+            //        match env::var("DATABASE_URL") {
+            //           Ok(val) => {
+            let url = Url::parse(&val).expect("couldn't parse Database URL");
+            s = s.set_override("database.url", url.to_string()).unwrap();
+            let database_type = DBType::from_url(&url).unwrap();
+            s = s
+                .set_override("database.database_type", database_type.to_string())
+                .unwrap();
+        }
+
+        //    Err(_e) => {
+        //    }
+
+        let intermediate_config = s.build_cloned().unwrap();
+
+        s = s
+            .set_override(
+                "database.url",
+                format!(
+                    r"postgres://{}:{}@{}:{}/{}",
+                    intermediate_config
+                        .get::<String>("database.username")
+                        .expect("Couldn't access database username"),
+                    intermediate_config
+                        .get::<String>("database.password")
+                        .expect("Couldn't access database password"),
+                    intermediate_config
+                        .get::<String>("database.hostname")
+                        .expect("Couldn't access database hostname"),
+                    intermediate_config
+                        .get::<String>("database.port")
+                        .expect("Couldn't access database port"),
+                    intermediate_config
+                        .get::<String>("database.name")
+                        .expect("Couldn't access database name")
+                ),
+            )
+            .expect("Couldn't set database url");
+
+        let settings = s.build()?.try_deserialize::<Settings>()?;
+        settings.check_url();
         settings.init();
 
         Ok(settings)