messages.rs

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