mod.rs 2.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687
  1. //! Environment variables module
  2. //!
  3. //! This module contains all environment variable definitions and parsing logic
  4. //! organized by component.
  5. mod common;
  6. mod info;
  7. mod ln;
  8. mod mint_info;
  9. #[cfg(feature = "cln")]
  10. mod cln;
  11. #[cfg(feature = "fakewallet")]
  12. mod fake_wallet;
  13. #[cfg(feature = "lnbits")]
  14. mod lnbits;
  15. #[cfg(feature = "lnd")]
  16. mod lnd;
  17. #[cfg(feature = "management-rpc")]
  18. mod management_rpc;
  19. use std::env;
  20. use std::str::FromStr;
  21. use anyhow::{anyhow, bail, Result};
  22. #[cfg(feature = "cln")]
  23. pub use cln::*;
  24. pub use common::*;
  25. #[cfg(feature = "fakewallet")]
  26. pub use fake_wallet::*;
  27. pub use ln::*;
  28. #[cfg(feature = "lnbits")]
  29. pub use lnbits::*;
  30. #[cfg(feature = "lnd")]
  31. pub use lnd::*;
  32. #[cfg(feature = "management-rpc")]
  33. pub use management_rpc::*;
  34. pub use mint_info::*;
  35. use crate::config::{Database, DatabaseEngine, LnBackend, Settings};
  36. impl Settings {
  37. pub fn from_env(&mut self) -> Result<Self> {
  38. if let Ok(database) = env::var(DATABASE_ENV_VAR) {
  39. let engine = DatabaseEngine::from_str(&database).map_err(|err| anyhow!(err))?;
  40. self.database = Database { engine };
  41. }
  42. self.info = self.info.clone().from_env();
  43. self.mint_info = self.mint_info.clone().from_env();
  44. self.ln = self.ln.clone().from_env();
  45. #[cfg(feature = "management-rpc")]
  46. {
  47. self.mint_management_rpc = Some(
  48. self.mint_management_rpc
  49. .clone()
  50. .unwrap_or_default()
  51. .from_env(),
  52. );
  53. }
  54. match self.ln.ln_backend {
  55. #[cfg(feature = "cln")]
  56. LnBackend::Cln => {
  57. self.cln = Some(self.cln.clone().unwrap_or_default().from_env());
  58. }
  59. #[cfg(feature = "lnbits")]
  60. LnBackend::LNbits => {
  61. self.lnbits = Some(self.lnbits.clone().unwrap_or_default().from_env());
  62. }
  63. #[cfg(feature = "fakewallet")]
  64. LnBackend::FakeWallet => {
  65. self.fake_wallet = Some(self.fake_wallet.clone().unwrap_or_default().from_env());
  66. }
  67. #[cfg(feature = "lnd")]
  68. LnBackend::Lnd => {
  69. self.lnd = Some(self.lnd.clone().unwrap_or_default().from_env());
  70. }
  71. LnBackend::None => bail!("Ln backend must be set"),
  72. #[allow(unreachable_patterns)]
  73. _ => bail!("Selected Ln backend is not enabled in this build"),
  74. }
  75. Ok(self.clone())
  76. }
  77. }