Skip to main content

gproxy_channel_api/
control.rs

1//! Credential-scoped control-plane operations.
2//!
3//! These are deliberately separate from model-routed data-plane operations:
4//! callers must name one concrete stored credential, so account metadata never
5//! leaks through the public aggregate gateway.
6
7use serde_json::Value;
8
9use crate::usage::{RateLimitResetCreditConsumeResponse, UsageSnapshot};
10
11#[derive(Debug, Clone, PartialEq, Eq)]
12pub enum CredentialControlOperation {
13    Usage,
14    ListRateLimitResetCredits,
15    ConsumeRateLimitResetCredit { idempotency_key: String },
16    Account,
17    Profile,
18    Settings,
19    ListTasks { query: Option<String> },
20    GetTask { task_id: String },
21    ListSiblingTurns { task_id: String, turn_id: String },
22    CreateTask { body: Value },
23}
24
25impl CredentialControlOperation {
26    pub const fn name(&self) -> &'static str {
27        match self {
28            Self::Usage => "usage",
29            Self::ListRateLimitResetCredits => "rate_limit_reset_credits",
30            Self::ConsumeRateLimitResetCredit { .. } => "rate_limit_reset_credit_consume",
31            Self::Account => "account",
32            Self::Profile => "profile",
33            Self::Settings => "settings",
34            Self::ListTasks { .. } => "tasks_list",
35            Self::GetTask { .. } => "task_get",
36            Self::ListSiblingTurns { .. } => "task_sibling_turns",
37            Self::CreateTask { .. } => "task_create",
38        }
39    }
40}
41
42#[derive(Debug, Clone)]
43pub enum CredentialControlResponse {
44    Usage(UsageSnapshot),
45    RateLimitResetCreditConsume(RateLimitResetCreditConsumeResponse),
46    Json(Value),
47}