Codex Handbook
config/src/skills_config.rs 57 lines
//! Skill-related configuration types shared across crates.use codex_utils_absolute_path::AbsolutePathBuf;use schemars::JsonSchema;use serde::Deserialize;use serde::Serialize;const fn default_enabled() -> bool {    true}#[derive(Serialize, Deserialize, Debug, Clone, PartialEq, Eq, JsonSchema)]#[schemars(deny_unknown_fields)]pub struct SkillConfig {    /// Path-based selector.    #[serde(default, skip_serializing_if = "Option::is_none")]    pub path: Option<AbsolutePathBuf>,    /// Name-based selector.    #[serde(default, skip_serializing_if = "Option::is_none")]    pub name: Option<String>,    pub enabled: bool,}#[derive(Serialize, Deserialize, Debug, Clone, Default, PartialEq, Eq, JsonSchema)]#[schemars(deny_unknown_fields)]pub struct SkillsConfig {    #[serde(default, skip_serializing_if = "Option::is_none")]    pub bundled: Option<BundledSkillsConfig>,    /// Whether turns receive the automatic skills instructions block.    #[serde(default, skip_serializing_if = "Option::is_none")]    pub include_instructions: Option<bool>,    #[serde(default, skip_serializing_if = "Vec::is_empty")]    pub config: Vec<SkillConfig>,}#[derive(Serialize, Deserialize, Debug, Clone, PartialEq, Eq, JsonSchema)]#[schemars(deny_unknown_fields)]pub struct BundledSkillsConfig {    #[serde(default = "default_enabled")]    pub enabled: bool,}impl Default for BundledSkillsConfig {    fn default() -> Self {        Self { enabled: true }    }}impl TryFrom<toml::Value> for SkillsConfig {    type Error = toml::de::Error;    fn try_from(value: toml::Value) -> Result<Self, Self::Error> {        SkillsConfig::deserialize(value)    }}