enneagram 1.3.0

A digital enneagram
use serde::{Deserialize, Serialize};

use crate::{
    config::{Fallback, Property, Config, DomainConfig, EdgesConfig, TriadsConfig}
};

#[derive(Clone, Debug, PartialEq, Eq, Serialize, Deserialize, Default)]
#[serde(deny_unknown_fields)]
pub struct EnneagramConfig
{
    #[serde(skip_serializing_if = "Option::is_none")]
    pub edges: Option<EdgesConfig>,
    #[serde(skip_serializing_if = "Option::is_none")]
    pub triads: Option<TriadsConfig>,
    #[serde(skip_serializing_if = "Option::is_none")]
    pub domains: Option<DomainConfig>
}

impl EnneagramConfig
{
    crate::config::getter!([_, c.enneagram].edges -> &EdgesConfig);

    crate::config::getter!([_, c.enneagram].triads -> &TriadsConfig);

    crate::config::getter!([_, c.enneagram].domains -> &DomainConfig);
}

impl Property for EnneagramConfig
{
    fn property<'a>(&'a self, _fallback: &'a Fallback) -> &'a Self
    {
        self
    }
}
impl<C> Property<EnneagramConfig> for C
where
    C: Property<Config>
{
    fn property<'a>(&'a self, fallback: &'a Fallback) -> &'a EnneagramConfig
    {
        self.property(fallback).enneagram(fallback)
    }
}