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