messages.rs

  1use serde::{Deserialize, Serialize};
  2
  3#[derive(Debug, Serialize)]
  4#[serde(rename_all = "camelCase")]
  5pub struct SetApiKey {
  6    pub api_key: String,
  7}
  8
  9// Outbound messages
 10#[derive(Debug, Serialize)]
 11#[serde(tag = "kind", rename_all = "snake_case")]
 12pub enum OutboundMessage {
 13    SetApiKey(SetApiKey),
 14    StateUpdate(StateUpdateMessage),
 15    #[allow(dead_code)]
 16    UseFreeVersion,
 17    Logout,
 18}
 19
 20#[derive(Debug, Serialize, Deserialize)]
 21#[serde(rename_all = "camelCase")]
 22pub struct StateUpdateMessage {
 23    pub new_id: String,
 24    pub updates: Vec<StateUpdate>,
 25}
 26
 27#[derive(Debug, Serialize, Deserialize)]
 28#[serde(tag = "kind", rename_all = "snake_case")]
 29pub enum StateUpdate {
 30    FileUpdate(FileUpdateMessage),
 31    CursorUpdate(CursorPositionUpdateMessage),
 32}
 33
 34#[derive(Debug, Serialize, Deserialize)]
 35#[serde(rename_all = "snake_case")]
 36pub struct FileUpdateMessage {
 37    pub path: String,
 38    pub content: String,
 39}
 40
 41#[derive(Debug, Serialize, Deserialize)]
 42#[serde(rename_all = "snake_case")]
 43pub struct CursorPositionUpdateMessage {
 44    pub path: String,
 45    pub offset: usize,
 46}
 47
 48// Inbound messages coming in on stdout
 49
 50#[derive(Debug, Serialize, Deserialize)]
 51#[serde(tag = "kind", rename_all = "snake_case")]
 52pub enum ResponseItem {
 53    // A completion
 54    Text { text: String },
 55    // Vestigial message type from old versions -- safe to ignore
 56    Del { text: String },
 57    // Be able to delete whitespace prior to the cursor, likely for the rest of the completion
 58    Dedent { text: String },
 59    // When the completion is over
 60    End,
 61    // Got the closing parentheses and shouldn't show any more after
 62    Barrier,
 63}
 64
 65#[derive(Debug, Serialize, Deserialize)]
 66#[serde(rename_all = "camelCase")]
 67pub struct SupermavenResponse {
 68    pub state_id: String,
 69    pub items: Vec<ResponseItem>,
 70}
 71
 72#[derive(Debug, Serialize, Deserialize)]
 73pub struct SupermavenMetadataMessage {
 74    pub dust_strings: Option<Vec<String>>,
 75}
 76
 77#[derive(Debug, Serialize, Deserialize)]
 78pub struct SupermavenTaskUpdateMessage {
 79    pub task: String,
 80    pub status: TaskStatus,
 81    pub percent_complete: Option<f32>,
 82}
 83
 84#[derive(Debug, Serialize, Deserialize)]
 85#[serde(rename_all = "snake_case")]
 86pub enum TaskStatus {
 87    InProgress,
 88    Complete,
 89}
 90
 91#[derive(Debug, Serialize, Deserialize)]
 92pub struct SupermavenActiveRepoMessage {
 93    pub repo_simple_name: Option<String>,
 94}
 95
 96#[derive(Debug, Serialize, Deserialize)]
 97#[serde(tag = "kind", rename_all = "snake_case")]
 98pub enum SupermavenPopupAction {
 99    OpenUrl { label: String, url: String },
100    NoOp { label: String },
101}
102
103#[derive(Debug, Serialize, Deserialize)]
104#[serde(rename_all = "snake_case")]
105pub struct SupermavenPopupMessage {
106    pub message: String,
107    pub actions: Vec<SupermavenPopupAction>,
108}
109
110#[derive(Debug, Serialize, Deserialize)]
111#[serde(tag = "kind", rename_all = "camelCase")]
112pub struct ActivationRequest {
113    pub activate_url: Option<String>,
114}
115
116#[derive(Debug, Serialize, Deserialize)]
117#[serde(rename_all = "camelCase")]
118pub struct SupermavenSetMessage {
119    pub key: String,
120    pub value: serde_json::Value,
121}
122
123#[derive(Clone, Debug, Serialize, Deserialize)]
124pub enum ServiceTier {
125    FreeNoLicense,
126    #[serde(other)]
127    Unknown,
128}
129
130#[derive(Debug, Serialize, Deserialize)]
131#[serde(tag = "kind", rename_all = "snake_case")]
132pub enum SupermavenMessage {
133    Response(SupermavenResponse),
134    Metadata(SupermavenMetadataMessage),
135    Apology {
136        message: Option<String>,
137    },
138    ActivationRequest(ActivationRequest),
139    ActivationSuccess,
140    Passthrough {
141        passthrough: Box<SupermavenMessage>,
142    },
143    Popup(SupermavenPopupMessage),
144    TaskStatus(SupermavenTaskUpdateMessage),
145    ActiveRepo(SupermavenActiveRepoMessage),
146    ServiceTier {
147        service_tier: ServiceTier,
148    },
149
150    Set(SupermavenSetMessage),
151    #[serde(other)]
152    Unknown,
153}