vault-link/sync-server/src/server/responses.rs
2026-09-22 20:27:13 +01:00

50 lines
1.5 KiB
Rust

use serde::{self, Deserialize, Serialize};
use ts_rs::TS;
use crate::app_state::database::models::{
DocumentVersionWithoutContent, FileManifest, VaultUpdateId,
};
/// Response to a ping request.
#[derive(TS, Debug, Clone, Serialize)]
#[serde(rename_all = "camelCase")]
#[ts(export)]
pub struct PingResponse {
/// Semantic version of the server.
pub server_version: String,
/// Whether the client is authenticated based on the sent Authorization
/// header.
pub is_authenticated: bool,
/// List of file extensions that are allowed to be merged.
pub mergeable_file_extensions: Vec<String>,
/// API version ensuring backwards & forwards compatibility between the client
/// and server.
pub supported_api_version: u32,
}
/// Response to an update document request.
#[derive(TS, Debug, Clone, Serialize, Deserialize)]
#[serde(tag = "type")]
#[ts(export)]
pub enum DocumentUpdateResponse {
/// The exact snapshot was committed, or this is its original acknowledgement.
Accepted(DocumentVersionWithoutContent),
/// Nothing was written. The client must incorporate this version before retrying.
StaleBase(DocumentVersionWithoutContent),
}
#[derive(TS, Debug, Clone, Serialize, Deserialize)]
#[serde(tag = "type")]
#[ts(export)]
pub enum FileManifestUpdateResponse {
Accepted {
#[serde(rename = "fileManifestId")]
#[ts(as = "f64")]
file_manifest_id: VaultUpdateId,
},
StaleBase(FileManifest),
}