mirror of
https://github.com/sxyazi/yazi.git
synced 2026-07-25 08:41:05 +00:00
41 lines
1.2 KiB
Rust
41 lines
1.2 KiB
Rust
use anyhow::Result;
|
|
use arc_swap::ArcSwap;
|
|
use serde::{Deserialize, Deserializer, de};
|
|
use yazi_codegen::{DeserializeOver, DeserializeOver2};
|
|
use yazi_fs::{SortBy, SortFallback};
|
|
use yazi_shim::{arc_swap::IntoPointee, cell::SyncCell};
|
|
|
|
use super::{MgrRatio, MouseEvents};
|
|
|
|
#[derive(Debug, Deserialize, DeserializeOver, DeserializeOver2)]
|
|
pub struct Mgr {
|
|
pub ratio: SyncCell<MgrRatio>,
|
|
|
|
// Sorting
|
|
pub sort_by: SyncCell<SortBy>,
|
|
pub sort_sensitive: SyncCell<bool>,
|
|
pub sort_reverse: SyncCell<bool>,
|
|
pub sort_dir_first: SyncCell<bool>,
|
|
pub sort_translit: SyncCell<bool>,
|
|
pub sort_fallback: SyncCell<SortFallback>,
|
|
|
|
// Display
|
|
#[serde(deserialize_with = "deserialize_linemode")]
|
|
pub linemode: ArcSwap<String>,
|
|
pub show_hidden: SyncCell<bool>,
|
|
pub show_symlink: SyncCell<bool>,
|
|
pub scrolloff: SyncCell<u8>,
|
|
pub mouse_events: SyncCell<MouseEvents>,
|
|
}
|
|
|
|
fn deserialize_linemode<'de, D>(deserializer: D) -> Result<ArcSwap<String>, D::Error>
|
|
where
|
|
D: Deserializer<'de>,
|
|
{
|
|
let s = String::deserialize(deserializer)?;
|
|
if s.is_empty() || s.len() > 20 {
|
|
return Err(de::Error::custom("linemode must be between 1 and 20 characters."));
|
|
}
|
|
|
|
Ok(s.into_pointee())
|
|
}
|