use serde::{Deserialize, Serialize};
use std::collections::BTreeMap;
use super::{DocumentIdentifier, ProjectHandle, SnapshotHandle};
#[derive(Clone, Debug, Default, Deserialize, Eq, PartialEq, Serialize)]
#[serde(rename_all = "camelCase")]
pub struct FileChangeSummary {
#[serde(default, skip_serializing_if = "Vec::is_empty")]
pub changed: Vec<DocumentIdentifier>,
#[serde(default, skip_serializing_if = "Vec::is_empty")]
pub created: Vec<DocumentIdentifier>,
#[serde(default, skip_serializing_if = "Vec::is_empty")]
pub deleted: Vec<DocumentIdentifier>,
}
#[derive(Clone, Debug, Deserialize, Eq, PartialEq, Serialize)]
#[serde(untagged)]
pub enum FileChanges {
Summary(FileChangeSummary),
#[serde(rename_all = "camelCase")]
InvalidateAll {
invalidate_all: bool,
},
}
#[derive(Clone, Debug, Default, Deserialize, Eq, PartialEq, Serialize)]
#[serde(rename_all = "camelCase")]
pub struct UpdateSnapshotParams {
#[serde(skip_serializing_if = "Option::is_none")]
pub open_project: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub file_changes: Option<FileChanges>,
}
#[derive(Clone, Debug, Default, Deserialize, Eq, PartialEq, Serialize)]
#[serde(rename_all = "camelCase")]
pub struct ProjectFileChanges {
#[serde(default, skip_serializing_if = "Vec::is_empty")]
pub changed_files: Vec<String>,
#[serde(default, skip_serializing_if = "Vec::is_empty")]
pub deleted_files: Vec<String>,
}
#[derive(Clone, Debug, Default, Deserialize, Eq, PartialEq, Serialize)]
#[serde(rename_all = "camelCase")]
pub struct SnapshotChanges {
#[serde(default, skip_serializing_if = "BTreeMap::is_empty")]
pub changed_projects: BTreeMap<ProjectHandle, ProjectFileChanges>,
#[serde(default, skip_serializing_if = "Vec::is_empty")]
pub removed_projects: Vec<ProjectHandle>,
}
#[derive(Clone, Debug, Deserialize, Eq, PartialEq, Serialize)]
#[serde(rename_all = "camelCase")]
pub struct UpdateSnapshotResponse {
pub snapshot: SnapshotHandle,
pub projects: Vec<super::ProjectResponse>,
#[serde(skip_serializing_if = "Option::is_none")]
pub changes: Option<SnapshotChanges>,
}