///|
/// Runtime extension setting produced from MoonBit app code.
///
/// Extension-specific configuration is carried by the permission scope, which
/// is validated at configuration time through `resolve_permission` and read per
/// request through `AppCommandRequestContext::permission_scope`. This type only
/// records whether an extension is active.
pub(all) enum ExtensionSetting {
  Disabled
  Enabled
} derive(Debug, Eq)

///|
pub impl Show for ExtensionSetting with fn output(self, logger) {
  match self {
    Disabled => logger.write_string("Disabled")
    Enabled => logger.write_string("Enabled")
  }
}

///|
/// Returns whether this setting enables an extension.
pub fn ExtensionSetting::is_enabled(self : ExtensionSetting) -> Bool {
  match self {
    Disabled => false
    Enabled => true
  }
}

///|
/// Builds an enabled extension setting.
pub fn ExtensionSetting::enabled() -> ExtensionSetting {
  Enabled
}

///|
/// Builds a disabled extension setting.
/// Use this when the manifest should preserve an explicit opt-out entry.
pub fn ExtensionSetting::disabled() -> ExtensionSetting {
  Disabled
}