supercode-interchange 0.4.81

Canonical, provider-neutral session interchange primitives for Supercode
Documentation
//! Allowlists, admins and policy, read from Hermes's own stores (docs/plans/hermes-compat.md row 8):
//! the home's `.env` allowlists and allow-all flags, the approved pairings under `platforms/pairing/`,
//! and each platform's `allow_admin_from`. Pairing codes are Hermes's: its pairing store issues and
//! approves them.

use std::collections::BTreeMap;

use schemars::JsonSchema;
use serde::{Deserialize, Serialize};

/// Per-platform policy.
#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize, JsonSchema, Default)]
#[serde(rename_all = "snake_case")]
pub enum AccessPolicy {
    /// Only allowlisted (or paired) senders.
    #[default]
    Allowlist,
    /// Anyone.
    Open,
}

/// The access record, as Hermes's stores hold it.
#[derive(Debug, Clone, Default, PartialEq, Eq, Serialize, Deserialize, JsonSchema)]
pub struct Access {
    /// Allowed senders per platform.
    #[serde(default)]
    pub allowlist: BTreeMap<String, Vec<String>>,
    /// Admins per platform.
    #[serde(default)]
    pub admins: BTreeMap<String, Vec<String>>,
    /// Policy per platform; `allowlist` when absent.
    #[serde(default)]
    pub policy: BTreeMap<String, AccessPolicy>,
}