#![allow(deprecated)]
pub mod builder;
pub mod cache;
pub mod composed;
pub mod contacts;
pub mod core_settings;
pub mod cors;
pub mod email;
pub mod env;
pub mod env_loader;
pub mod env_parser;
pub mod fragment;
pub mod i18n;
pub mod interpolation;
pub mod logging;
pub mod media;
pub(crate) mod merge;
pub mod openapi;
pub mod policy;
pub mod prelude;
pub mod profile;
pub mod schema;
pub mod secret_types;
pub mod security;
pub mod session;
pub mod sources;
pub mod static_files;
pub mod template_settings;
pub mod typed_deserializer;
pub mod validation;
#[cfg(feature = "async")]
pub mod dynamic;
#[cfg(feature = "async")]
pub mod backends;
#[cfg(feature = "async")]
pub mod secrets;
#[cfg(feature = "encryption")]
pub mod encryption;
#[cfg(feature = "async")]
pub mod audit;
#[cfg(feature = "hot-reload")]
pub mod hot_reload;
pub mod config;
pub mod database_config;
pub mod docs;
pub mod testing;
use serde::{Deserialize, Serialize};
use std::collections::HashMap;
use std::path::PathBuf;
#[derive(Clone, Debug, Serialize, Deserialize, PartialEq, Eq)]
pub struct Contact {
pub name: String,
pub email: String,
}
impl Contact {
pub fn new(name: impl Into<String>, email: impl Into<String>) -> Self {
Self {
name: name.into(),
email: email.into(),
}
}
}
pub use database_config::DatabaseConfig;
pub use policy::{FieldPolicy, FieldRequirement};
pub use composed::ComposedSettings;
pub use builder::MergeStrategy;
#[deprecated(
since = "0.2.0",
note = "Use `TemplateSettings` with the `#[settings]` macro instead."
)]
#[non_exhaustive]
#[derive(Clone, Debug, Serialize, Deserialize)]
pub struct TemplateConfig {
pub backend: String,
pub dirs: Vec<PathBuf>,
pub app_dirs: bool,
pub options: HashMap<String, serde_json::Value>,
}
impl TemplateConfig {
pub fn new(backend: impl Into<String>) -> Self {
Self {
backend: backend.into(),
dirs: vec![],
app_dirs: true,
options: HashMap::new(),
}
}
pub fn add_dir(mut self, dir: impl Into<PathBuf>) -> Self {
self.dirs.push(dir.into());
self
}
}
impl Default for TemplateConfig {
fn default() -> Self {
let mut options = HashMap::new();
options.insert(
"context_processors".to_string(),
serde_json::json!([
"reinhardt.template.context_processors.request",
"reinhardt.contrib.auth.context_processors.auth",
"reinhardt.contrib.messages.context_processors.messages",
]),
);
Self {
backend: "reinhardt.template.backends.jinja2.Jinja2".to_string(),
dirs: vec![],
app_dirs: true,
options,
}
}
}
impl From<&template_settings::FragmentTemplateConfig> for TemplateConfig {
fn from(settings: &template_settings::FragmentTemplateConfig) -> Self {
Self {
backend: settings.backend.clone(),
dirs: settings.dirs.clone(),
app_dirs: settings.app_dirs,
options: settings.options.clone(),
}
}
}
pub fn create_template_configs_from_settings(
settings: &template_settings::TemplateSettings,
) -> Vec<TemplateConfig> {
settings.configs.iter().map(TemplateConfig::from).collect()
}
#[non_exhaustive]
#[derive(Clone, Debug, Serialize, Deserialize)]
pub struct MiddlewareConfig {
pub path: String,
pub options: HashMap<String, serde_json::Value>,
}
impl MiddlewareConfig {
pub fn new(path: impl Into<String>) -> Self {
Self {
path: path.into(),
options: HashMap::new(),
}
}
pub fn with_option(mut self, key: impl Into<String>, value: serde_json::Value) -> Self {
self.options.insert(key.into(), value);
self
}
}