#![allow(missing_docs)]
#[allow(unused_imports)]
use crate::common::{AnyValue, JsonObject, StringOrMarkdown, Uri};
#[allow(unused_imports)]
use serde::{Deserialize, Serialize};
#[allow(unused_imports)]
use serde_repr::{Deserialize_repr, Serialize_repr};
#[allow(unused_imports)]
use crate::state::{FileEdit, ModelSelection, ProjectInfo, SessionStatus, SessionSummary};
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Serialize, Deserialize)]
pub enum AuthRequiredReason {
#[serde(rename = "required")]
Required,
#[serde(rename = "expired")]
Expired,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Serialize, Deserialize)]
pub enum NotificationType {
#[serde(rename = "notify/sessionAdded")]
SessionAdded,
#[serde(rename = "notify/sessionRemoved")]
SessionRemoved,
#[serde(rename = "notify/sessionSummaryChanged")]
SessionSummaryChanged,
#[serde(rename = "notify/authRequired")]
AuthRequired,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct SessionAddedNotification {
pub summary: SessionSummary,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct SessionRemovedNotification {
pub session: Uri,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct SessionSummaryChangedNotification {
pub session: Uri,
pub changes: PartialSessionSummary,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct AuthRequiredNotification {
pub resource: String,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub reason: Option<AuthRequiredReason>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, Default)]
#[serde(rename_all = "camelCase")]
pub struct PartialSessionSummary {
#[serde(default, skip_serializing_if = "Option::is_none")]
pub resource: Option<Uri>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub provider: Option<String>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub title: Option<String>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub status: Option<u32>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub activity: Option<String>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub created_at: Option<i64>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub modified_at: Option<i64>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub project: Option<ProjectInfo>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub model: Option<ModelSelection>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub working_directory: Option<Uri>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub diffs: Option<Vec<FileEdit>>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[serde(tag = "type")]
pub enum ProtocolNotification {
#[serde(rename = "notify/sessionAdded")]
SessionAdded(SessionAddedNotification),
#[serde(rename = "notify/sessionRemoved")]
SessionRemoved(SessionRemovedNotification),
#[serde(rename = "notify/sessionSummaryChanged")]
SessionSummaryChanged(SessionSummaryChangedNotification),
#[serde(rename = "notify/authRequired")]
AuthRequired(AuthRequiredNotification),
}