use mlua::{FromLua, UserData};
use serde::{Deserialize, Serialize};
use std::path::PathBuf;
#[derive(Debug, PartialEq, Eq, Clone, Serialize, Deserialize, FromLua)]
pub struct RockLayoutConfig {
pub(crate) etc_root: Option<PathBuf>,
pub(crate) etc: PathBuf,
pub(crate) opt_etc: PathBuf,
pub(crate) conf: PathBuf,
pub(crate) doc: PathBuf,
}
impl RockLayoutConfig {
pub fn new_nvim_layout() -> Self {
Self {
etc_root: Some("site/pack/lux".into()),
etc: "start".into(),
opt_etc: "opt".into(),
conf: "conf".into(),
doc: "doc".into(),
}
}
pub(crate) fn is_default(&self) -> bool {
&Self::default() == self
}
}
impl Default for RockLayoutConfig {
fn default() -> Self {
Self {
etc_root: None,
etc: "etc".into(),
opt_etc: "etc".into(),
conf: "conf".into(),
doc: "doc".into(),
}
}
}
impl UserData for RockLayoutConfig {
fn add_methods<M: mlua::UserDataMethods<Self>>(methods: &mut M) {
methods.add_function("new", |_, ()| Ok(RockLayoutConfig::default()));
methods.add_function("new_nvim_layout", |_, ()| {
Ok(RockLayoutConfig::new_nvim_layout())
});
}
}