index : license-api-rs.git

ascending towards madness

author holly sparkles <sparkles@holly.sh> 2023-10-04 9:30:15.0 +00:00:00
committer holly sparkles <sparkles@holly.sh> 2023-10-04 9:30:15.0 +00:00:00
commit
8cf93f45c1cc789ae55d7b46196bc3746ad23093 [patch]
tree
1ca35647937cc0b7576a1a934152c21c5b2bd951
parent
4156bc42fae04732ff39adc9baff45e98fe32f8b
download
8cf93f45c1cc789ae55d7b46196bc3746ad23093.tar.gz

refactor: move config structs to config module



Diff

 src/config.rs | 37 +++++++++++++++++++++++++++++++++++++
 src/main.rs   | 43 ++++++-------------------------------------
 2 files changed, 43 insertions(+), 37 deletions(-)

diff --git a/src/config.rs b/src/config.rs
new file mode 100644
index 0000000..b2f0909
--- /dev/null
+++ b/src/config.rs
@@ -0,0 +1,37 @@
use jealousy::FromEnv;
use serde::Deserialize;
use std::net::Ipv4Addr;

use crate::data::LicenseDatabase;

#[derive(Debug, Deserialize, FromEnv, Clone)]
#[from_env(prefix = "LICENSE_API")]
pub struct ServerConfig {
    #[serde(default = "ServerConfig::default_base_url")]
    pub base_url: String,
    pub database: String,
    #[serde(default = "ServerConfig::default_server_ip")]
    pub server_ip: Ipv4Addr, // TODO: IPv6 support
    #[serde(default = "ServerConfig::default_server_port")]
    pub server_port: u16,
}

impl ServerConfig {
    fn default_base_url() -> String {
        String::from("/")
    }

    fn default_server_ip() -> Ipv4Addr {
        Ipv4Addr::new(0, 0, 0, 0)
    }

    fn default_server_port() -> u16 {
        8080
    }
}

#[derive(Debug, Clone)]
pub struct RunningConfig {
    pub config: ServerConfig,
    pub database: LicenseDatabase,
}
diff --git a/src/main.rs b/src/main.rs
index fa6b0c4..71991d8 100644
--- a/src/main.rs
+++ b/src/main.rs
@@ -3,47 +3,16 @@ use async_std::{
    path::{Path, PathBuf},
};
use data::LicenseDatabase;
use jealousy::FromEnv;
use serde::Deserialize;
use std::net::Ipv4Addr;
use tide::{http::mime, log, Response, Result, Server, StatusCode};

use crate::data::Queryable;
use crate::{
    config::{RunningConfig, ServerConfig},
    data::Queryable,
};

mod config;
mod data;

#[derive(Debug, Deserialize, FromEnv, Clone)]
#[from_env(prefix = "LICENSE_API")]
struct ServerConfig {
    #[serde(default = "ServerConfig::default_base_url")]
    base_url: String,
    database: String,
    #[serde(default = "ServerConfig::default_server_ip")]
    server_ip: Ipv4Addr, // TODO: IPv6 support
    #[serde(default = "ServerConfig::default_server_port")]
    server_port: u16,
}

impl ServerConfig {
    fn default_base_url() -> String {
        String::from("/")
    }

    fn default_server_ip() -> Ipv4Addr {
        Ipv4Addr::new(0, 0, 0, 0)
    }

    fn default_server_port() -> u16 {
        8080
    }
}

#[derive(Debug, Clone)]
struct RunningConfig {
    config: ServerConfig,
    database: LicenseDatabase,
}

const ERROR_LICENSE_NOT_FOUND: &str =
    " is undefined. use the 'list' endpoint to see defined licenses.";

@@ -51,7 +20,7 @@ const ERROR_LICENSE_NOT_FOUND: &str =
async fn main() -> Result<()> {
    log::start();

    match ServerConfig::from_env() {
    match <ServerConfig as jealousy::FromEnv>::from_env() {
        Ok(config) => {
            // TODO: fix the borrow issue here
            let run_config = RunningConfig {