diff --git a/easytier/Cargo.toml b/easytier/Cargo.toml index daaf27db..41783c5b 100644 --- a/easytier/Cargo.toml +++ b/easytier/Cargo.toml @@ -50,6 +50,7 @@ time = "0.3" toml = "0.8.12" chrono = { version = "0.4.37", features = ["serde"] } +getset = "0.1.6" optional_struct = "0.5.2" guarden = "0.1" diff --git a/easytier/src/common/config.rs b/easytier/src/common/config.rs index 75db4458..01f024b0 100644 --- a/easytier/src/common/config.rs +++ b/easytier/src/common/config.rs @@ -16,6 +16,7 @@ use clap::ValueEnum; use clap::builder::PossibleValue; use derivative::Derivative; use derive_more::{Constructor, Deref}; +use getset::Getters; use optional_struct::Applicable; use serde::{Deserialize, Serialize}; use std::fmt::{Debug, Display}; @@ -28,21 +29,23 @@ use std::{ use strum::{Display, EnumString, VariantArray}; use tokio::io::AsyncReadExt as _; -#[derive(Derivative, Debug, Clone, Constructor, Deref, Deserialize)] +#[derive(Derivative, Debug, Clone, Constructor, Getters, Deref, Deserialize)] #[derivative(PartialEq(bound = "Parsed: PartialEq"))] #[serde(try_from = "Raw")] #[serde( bound = "Raw: Deserialize<'de>, as TryFrom>::Error: Display" )] -pub struct ConfigBase +pub struct ConfigBase where Raw: Applicable, - ConfigBase: TryFrom, + ConfigBase: TryFrom, { - #[derivative(PartialEq = "ignore")] - raw: Raw, #[deref] parsed: Parsed, + #[getset(get)] + #[derivative(PartialEq = "ignore")] + raw: Raw, + #[getset(get)] #[derivative(PartialEq = "ignore")] data: Data, } @@ -75,14 +78,14 @@ where Raw: Applicable, ConfigBase: TryFrom, { - pub fn into_raw(self) -> Raw { - self.raw - } - pub fn into_parsed(self) -> Parsed { self.parsed } + pub fn into_raw(self) -> Raw { + self.raw + } + pub fn into_data(self) -> Data { self.data } diff --git a/easytier/src/dns/config/dns.rs b/easytier/src/dns/config/dns.rs index 60acaa9f..5f129ecd 100644 --- a/easytier/src/dns/config/dns.rs +++ b/easytier/src/dns/config/dns.rs @@ -35,7 +35,7 @@ impl From for DnsConfig { }; let parsed = raw.clone().build(default); - Self::new(raw, parsed, ()) + Self::new(parsed, raw, ()) } } diff --git a/easytier/src/dns/config/zone.rs b/easytier/src/dns/config/zone.rs index bab57324..7ed62a58 100644 --- a/easytier/src/dns/config/zone.rs +++ b/easytier/src/dns/config/zone.rs @@ -79,7 +79,7 @@ impl TryFrom for ZoneConfig { let data = (&parsed).into(); let _ = Zone::try_from(&data)?; // validation - Ok(Self::new(raw, parsed, data)) + Ok(Self::new(parsed, raw, data)) } } @@ -107,6 +107,6 @@ impl ZoneConfig { let data = (&parsed).into(); - Self::new(Default::default(), parsed, data) + Self::new(parsed, Default::default(), data) } }