l3_fn_config 0.0.2-alpha.1

Parsing l3.toml config files
Documentation
use crate::{
    configs::LambdaConfig, configs::LambdaEnvConfig, configs::LambdaRuntimeConfig,
    configs::ProjectConfig, ConfigParseError, OptionallyParsable,
};

impl TryFrom<&toml::Table> for ProjectConfig {
    type Error = ConfigParseError;

    fn try_from(project_t: &toml::Table) -> Result<Self, Self::Error> {
        let lambdas = match project_t.get("lambda") {
            None => Vec::new(),
            Some(lambda_v) => match lambda_v {
                toml::Value::Array(lambda_a) => {
                    let mut lambdas = Vec::new();
                    for lambda_v in lambda_a {
                        match lambda_v {
                            toml::Value::Table(lambda_t) => {
                                lambdas.push(LambdaConfig::try_from(lambda_t)?)
                            }
                            _ => panic!(),
                        }
                    }
                    lambdas
                }
                toml::Value::Table(lambda_t) => vec![LambdaConfig::try_from(lambda_t)?],
                _ => panic!("toml key lambda is neither [lambda] nor [[lambda]]"),
            },
        };
        Ok(Self {
            project_name: project_t
                .get("name")
                .and_then(|name_v| name_v.as_str().map(|s| s.to_string())),
            lambda_naming: project_t
                .get("naming")
                .and_then(|naming_v| naming_v.as_str().map(|s| s.to_string())),
            lambdas,
            env: LambdaEnvConfig::optionally_parse(project_t)?,
            runtime: LambdaRuntimeConfig::optionally_parse(project_t)?,
        })
    }
}