config.rs 2.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970
  1. use std::str::FromStr;
  2. use serde::{Deserialize, Serialize};
  3. pub enum CollabDBPluginProvider {
  4. AWS,
  5. Supabase,
  6. }
  7. #[derive(Clone, Debug, Serialize, Deserialize, Default)]
  8. pub struct CollabPluginConfig {
  9. /// Only one of the following two fields should be set.
  10. aws_config: Option<AWSDynamoDBConfig>,
  11. }
  12. impl CollabPluginConfig {
  13. pub fn from_env() -> Self {
  14. let aws_config = AWSDynamoDBConfig::from_env();
  15. Self { aws_config }
  16. }
  17. pub fn aws_config(&self) -> Option<&AWSDynamoDBConfig> {
  18. self.aws_config.as_ref()
  19. }
  20. }
  21. impl CollabPluginConfig {}
  22. impl FromStr for CollabPluginConfig {
  23. type Err = serde_json::Error;
  24. fn from_str(s: &str) -> Result<Self, Self::Err> {
  25. serde_json::from_str(s)
  26. }
  27. }
  28. pub const AWS_ACCESS_KEY_ID: &str = "AWS_ACCESS_KEY_ID";
  29. pub const AWS_SECRET_ACCESS_KEY: &str = "AWS_SECRET_ACCESS_KEY";
  30. pub const AWS_REGION: &str = "AWS_REGION";
  31. // To enable this test, you should set AWS_ACCESS_KEY_ID and AWS_SECRET_ACCESS_KEY in your environment variables.
  32. // or create the ~/.aws/credentials file following the instructions in https://docs.aws.amazon.com/sdk-for-rust/latest/dg/credentials.html
  33. #[derive(Default, Clone, Debug, Serialize, Deserialize)]
  34. pub struct AWSDynamoDBConfig {
  35. pub access_key_id: String,
  36. pub secret_access_key: String,
  37. // Region list: https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/Concepts.RegionsAndAvailabilityZones.html
  38. pub region: String,
  39. pub enable: bool,
  40. }
  41. impl AWSDynamoDBConfig {
  42. pub fn from_env() -> Option<Self> {
  43. let access_key_id = std::env::var(AWS_ACCESS_KEY_ID).ok()?;
  44. let secret_access_key = std::env::var(AWS_SECRET_ACCESS_KEY).ok()?;
  45. let region = std::env::var(AWS_REGION).unwrap_or_else(|_| "us-east-1".to_string());
  46. Some(Self {
  47. access_key_id,
  48. secret_access_key,
  49. region,
  50. enable: true,
  51. })
  52. }
  53. pub fn write_env(&self) {
  54. std::env::set_var(AWS_ACCESS_KEY_ID, &self.access_key_id);
  55. std::env::set_var(AWS_SECRET_ACCESS_KEY, &self.secret_access_key);
  56. std::env::set_var(AWS_REGION, &self.region);
  57. }
  58. }