feat: load billing adapters #125
3 changed files with 69 additions and 0 deletions
|
@ -33,3 +33,8 @@ reply_to="Vanikam Support <vanikam@example.com>"
|
||||||
[meili]
|
[meili]
|
||||||
#url = "http://localhost:7700"
|
#url = "http://localhost:7700"
|
||||||
#api_key = ""
|
#api_key = ""
|
||||||
|
|
||||||
|
|
||||||
|
[phone]
|
||||||
|
twilio_account_id = ""
|
||||||
|
twilio_auth_token = ""
|
||||||
|
|
|
@ -14,11 +14,13 @@ use validator::Validate;
|
||||||
pub mod database;
|
pub mod database;
|
||||||
pub mod email;
|
pub mod email;
|
||||||
pub mod meili;
|
pub mod meili;
|
||||||
|
pub mod phone;
|
||||||
pub mod server;
|
pub mod server;
|
||||||
|
|
||||||
use database::{DBType, Database};
|
use database::{DBType, Database};
|
||||||
use email::Email;
|
use email::Email;
|
||||||
use meili::Meili;
|
use meili::Meili;
|
||||||
|
use phone::Phone;
|
||||||
use server::Server;
|
use server::Server;
|
||||||
|
|
||||||
#[derive(Debug, Clone, Validate, Deserialize, Eq, PartialEq)]
|
#[derive(Debug, Clone, Validate, Deserialize, Eq, PartialEq)]
|
||||||
|
@ -32,6 +34,7 @@ pub struct Settings {
|
||||||
pub server: Server,
|
pub server: Server,
|
||||||
pub email: Email,
|
pub email: Email,
|
||||||
pub meili: Meili,
|
pub meili: Meili,
|
||||||
|
pub phone: Phone,
|
||||||
}
|
}
|
||||||
|
|
||||||
impl Settings {
|
impl Settings {
|
||||||
|
@ -52,6 +55,7 @@ impl Settings {
|
||||||
s = Database::env_override(s);
|
s = Database::env_override(s);
|
||||||
s = Email::env_override(s);
|
s = Email::env_override(s);
|
||||||
s = Meili::env_override(s);
|
s = Meili::env_override(s);
|
||||||
|
s = Phone::env_override(s);
|
||||||
Server::env_override(s)
|
Server::env_override(s)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
60
src/settings/phone.rs
Normal file
60
src/settings/phone.rs
Normal file
|
@ -0,0 +1,60 @@
|
||||||
|
// SPDX-FileCopyrightText: 2024 Aravinth Manivannan <realaravinth@batsense.net>
|
||||||
|
//
|
||||||
|
// SPDX-License-Identifier: AGPL-3.0-or-later
|
||||||
|
|
||||||
|
use std::env;
|
||||||
|
|
||||||
|
use config::{builder::DefaultState, ConfigBuilder};
|
||||||
|
use lettre::message::Mailbox;
|
||||||
|
use serde::{Deserialize, Serialize};
|
||||||
|
use url::Url;
|
||||||
|
use validator::{Validate, ValidationError};
|
||||||
|
|
||||||
|
#[derive(Debug, Clone, Serialize, Deserialize, Validate, Eq, PartialEq)]
|
||||||
|
pub struct Phone {
|
||||||
|
pub twilio_account_id: String,
|
||||||
|
pub twilio_auth_token: String,
|
||||||
|
}
|
||||||
|
|
||||||
|
impl Phone {
|
||||||
|
pub fn env_override(mut s: ConfigBuilder<DefaultState>) -> ConfigBuilder<DefaultState> {
|
||||||
|
for (parameter, env_var_name) in [
|
||||||
|
("phone.twilio_account_id", "VANIKAM_phone_TWILIO_ACCOUNT_ID"),
|
||||||
|
("phone.twilio_auth_token", "VANIKAM_phone_TWILIO_AUTH_TOKEN"),
|
||||||
|
]
|
||||||
|
.iter()
|
||||||
|
{
|
||||||
|
if let Ok(val) = env::var(env_var_name) {
|
||||||
|
log::debug!("Overriding [{parameter}] with environment variable {env_var_name}");
|
||||||
|
s = s.set_override(parameter, val).unwrap();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
s
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
#[cfg(test)]
|
||||||
|
mod tests {
|
||||||
|
use crate::env_helper;
|
||||||
|
|
||||||
|
use super::*;
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn test_phone_env_override() {
|
||||||
|
let init_settings = crate::settings::Settings::new().unwrap();
|
||||||
|
|
||||||
|
env_helper!(
|
||||||
|
init_settings,
|
||||||
|
"VANIKAM_phone_TWILIO_AUTH_TOKEN",
|
||||||
|
"foo".to_string(),
|
||||||
|
phone.twilio_auth_token
|
||||||
|
);
|
||||||
|
env_helper!(
|
||||||
|
init_settings,
|
||||||
|
"VANIKAM_phone_TWILIO_ACCOUNT_ID",
|
||||||
|
"foo".to_string(),
|
||||||
|
phone.twilio_account_id
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in a new issue