From f2dc0a37acdc2cbdef1375c73dd248e5542ac1fc Mon Sep 17 00:00:00 2001 From: yixiaojiu Date: Sun, 10 Nov 2024 22:42:25 +0800 Subject: [PATCH] refactor: refactor ConfigRef struct --- kimika/src/config/mod.rs | 18 +++++++++++++----- kimika/src/main.rs | 3 +-- kimika/src/receive/mod.rs | 2 +- kimika/src/send/mod.rs | 2 +- 4 files changed, 16 insertions(+), 9 deletions(-) diff --git a/kimika/src/config/mod.rs b/kimika/src/config/mod.rs index 8f3fe85..14d51b0 100644 --- a/kimika/src/config/mod.rs +++ b/kimika/src/config/mod.rs @@ -33,22 +33,30 @@ pub struct SenderConfig { pub receiver_port: u16, } -pub struct ConfigOnceCell(pub OnceCell); +pub struct ConfigOnceCell { + inner: OnceCell, +} impl std::ops::Deref for ConfigOnceCell { type Target = Config; fn deref(&self) -> &Self::Target { - self.0.get().unwrap() + self.inner.get().unwrap() } } impl std::fmt::Debug for ConfigOnceCell { fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { - write!(f, "{:?}", self.0.get().unwrap()) + write!(f, "{:?}", self.inner.get().unwrap()) } } impl ConfigOnceCell { + pub const fn new() -> Self { + Self { + inner: OnceCell::new(), + } + } + pub fn set_from_send_args(&self, args: &send::SendArgs) -> Result<(), Config> { let mut config = Config::new(); if let Some(alias) = args.alias.clone() { @@ -60,7 +68,7 @@ impl ConfigOnceCell { if let Some(receiver_port) = args.receiver_port { config.sender.receiver_port = receiver_port } - self.0.set(config) + self.inner.set(config) } pub fn set_from_receive_args(&self, args: &receive::ReceiveArgs) -> Result<(), Config> { @@ -74,7 +82,7 @@ impl ConfigOnceCell { if let Some(save_folder) = args.folder.clone() { config.receiver.save_folder = save_folder } - self.0.set(config) + self.inner.set(config) } } diff --git a/kimika/src/main.rs b/kimika/src/main.rs index df9bf82..7604fe4 100644 --- a/kimika/src/main.rs +++ b/kimika/src/main.rs @@ -9,9 +9,8 @@ mod utils; use clap::{Parser, Subcommand}; use config::ConfigOnceCell; -use once_cell::sync::OnceCell; -pub static CONFIG: ConfigOnceCell = ConfigOnceCell(OnceCell::new()); +pub static CONFIG: ConfigOnceCell = ConfigOnceCell::new(); #[derive(Parser)] #[command(version, long_about = None, styles = utils::clap::clap_styles())] diff --git a/kimika/src/receive/mod.rs b/kimika/src/receive/mod.rs index 33a21a6..f512f93 100644 --- a/kimika/src/receive/mod.rs +++ b/kimika/src/receive/mod.rs @@ -30,7 +30,7 @@ pub struct ReceiveArgs { } pub async fn receive(args: ReceiveArgs) -> Result<(), Box> { - let _result = CONFIG.set_from_receive_args(&args); + CONFIG.set_from_receive_args(&args).unwrap(); if args.server { remote::remote_receive(&args).await?; diff --git a/kimika/src/send/mod.rs b/kimika/src/send/mod.rs index b99b260..5ee0b86 100644 --- a/kimika/src/send/mod.rs +++ b/kimika/src/send/mod.rs @@ -44,7 +44,7 @@ pub async fn send(args: SendArgs) -> Result<(), Box> { return Ok(()); } - let _result = CONFIG.set_from_send_args(&args); + CONFIG.set_from_send_args(&args).unwrap(); if args.server { remote::remote_send(&args).await?;