use crate::database::action::Action; use indexmap::IndexMap; use serde::{Deserialize, Serialize}; use serde_json::Value; #[derive(Debug, Clone, Serialize, Deserialize, Default)] #[serde(default)] pub struct Page { #[serde(skip_serializing_if = "Option::is_none")] pub path: Option, #[serde(skip_serializing_if = "Option::is_none")] pub title: Option, #[serde(skip_serializing_if = "Option::is_none")] pub sidebar: Option, #[serde(skip_serializing_if = "Option::is_none")] pub actions: Option>, /// The personal-scope filter template ("one surface, two scopes"): the /// "mine" predicate the page merges into its filter when the app is in /// personal scope, e.g. {"reserved_by": "$me"}. Opaque to the engine. #[serde(skip_serializing_if = "Option::is_none")] pub personal: Option, } #[derive(Debug, Clone, Serialize, Deserialize, Default)] #[serde(default)] pub struct Sidebar { #[serde(skip_serializing_if = "Option::is_none")] pub category: Option, #[serde(skip_serializing_if = "Option::is_none")] pub priority: Option, #[serde(skip_serializing_if = "Option::is_none")] pub icon: Option, }