cli_config.rs 4.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184
  1. use crate::util::join_config_path;
  2. use crate::Result;
  3. use serde::{Deserialize, Serialize};
  4. use serde::de::DeserializeOwned;
  5. use std::marker::PhantomData;
  6. use std::str;
  7. use std::{
  8. fs,
  9. fs::{create_dir_all, File},
  10. io::Write,
  11. };
  12. pub struct Config<T> {
  13. config: PhantomData<T>,
  14. }
  15. impl<T: Default + Serialize + DeserializeOwned> Config<T> {
  16. pub fn load(path: PathBuf) -> Result<T> {
  17. let toml = fs::read(&path)?;
  18. let str_buff = str::from_utf8(&toml)?;
  19. let config: T = toml::from_str(str_buff.clone())?;
  20. Ok(config)
  21. }
  22. pub fn load_default(path: PathBuf) -> Result<T> {
  23. let toml = T::default();
  24. let config_file = toml::to_string(&toml)?;
  25. if let Some(outdir) = path.parent() {
  26. create_dir_all(outdir)?;
  27. }
  28. let mut file = File::create(path.clone())?;
  29. file.write_all(&config_file.into_bytes())?;
  30. let config = Self::load(path)?;
  31. Ok(config)
  32. }
  33. }
  34. use std::path::PathBuf;
  35. #[derive(Serialize, Deserialize, Debug)]
  36. pub struct DrkConfig {
  37. #[serde(default)]
  38. pub rpc_url: String,
  39. #[serde(default)]
  40. pub log_path: String,
  41. }
  42. impl Default for DrkConfig {
  43. fn default() -> Self {
  44. let rpc_url = String::from("http://127.0.0.1:8000");
  45. let log_path = String::from("/tmp/drk_cli.log");
  46. Self { rpc_url, log_path }
  47. }
  48. }
  49. #[derive(Serialize, Deserialize, Debug)]
  50. pub struct DarkfidConfig {
  51. #[serde(default)]
  52. #[serde(rename = "connect_url")]
  53. pub connect_url: String,
  54. #[serde(default)]
  55. #[serde(rename = "subscriber_url")]
  56. pub subscriber_url: String,
  57. #[serde(default)]
  58. #[serde(rename = "rpc_url")]
  59. pub rpc_url: String,
  60. #[serde(default)]
  61. #[serde(rename = "database_path")]
  62. pub database_path: String,
  63. #[serde(default)]
  64. #[serde(rename = "log_path")]
  65. pub log_path: String,
  66. #[serde(default)]
  67. #[serde(rename = "password")]
  68. pub password: String,
  69. }
  70. impl Default for DarkfidConfig {
  71. fn default() -> Self {
  72. let connect_url = String::from("127.0.0.1:3333");
  73. let subscriber_url = String::from("127.0.0.1:4444");
  74. let rpc_url = String::from("127.0.0.1:8000");
  75. let database_path = String::from("database_client.db");
  76. let database_path = join_config_path(&PathBuf::from(database_path))
  77. .expect("error during join database_path to config path");
  78. let database_path = String::from(
  79. database_path
  80. .to_str()
  81. .expect("error convert Path to String"),
  82. );
  83. let log_path = String::from("/tmp/darkfid_service_daemon.log");
  84. let password = String::new();
  85. Self {
  86. connect_url,
  87. subscriber_url,
  88. rpc_url,
  89. database_path,
  90. log_path,
  91. password,
  92. }
  93. }
  94. }
  95. #[derive(Serialize, Deserialize, Debug)]
  96. pub struct GatewaydConfig {
  97. #[serde(default)]
  98. #[serde(rename = "connect_url")]
  99. pub accept_url: String,
  100. #[serde(default)]
  101. #[serde(rename = "publisher_url")]
  102. pub publisher_url: String,
  103. #[serde(default)]
  104. #[serde(rename = "database_path")]
  105. pub database_path: String,
  106. #[serde(default)]
  107. #[serde(rename = "log_path")]
  108. pub log_path: String,
  109. }
  110. impl Default for GatewaydConfig {
  111. fn default() -> Self {
  112. let accept_url = String::from("127.0.0.1:3333");
  113. let publisher_url = String::from("127.0.0.1:4444");
  114. let database_path = String::from("gatewayd.db");
  115. let log_path = String::from("/tmp/gatewayd.log");
  116. Self {
  117. accept_url,
  118. publisher_url,
  119. database_path,
  120. log_path,
  121. }
  122. }
  123. }
  124. #[derive(Serialize, Deserialize, Debug)]
  125. pub struct CashierdConfig {
  126. #[serde(default)]
  127. #[serde(rename = "connect_url")]
  128. pub accept_url: String,
  129. #[serde(default)]
  130. #[serde(rename = "database_path")]
  131. pub database_path: String,
  132. #[serde(default)]
  133. #[serde(rename = "log_path")]
  134. pub log_path: String,
  135. #[serde(default)]
  136. #[serde(rename = "password")]
  137. pub password: String,
  138. }
  139. impl Default for CashierdConfig {
  140. fn default() -> Self {
  141. let accept_url = String::from("127.0.0.1:7777");
  142. let database_path = String::from("cashierd.db");
  143. let log_path = String::from("/tmp/cashierd.log");
  144. let password = String::new();
  145. Self {
  146. accept_url,
  147. database_path,
  148. log_path,
  149. password,
  150. }
  151. }
  152. }