use cosh_sdk::rollback::{RestoreInput, restore};
use super::types::{FsMetadata, FsRollback};
use serde::Serialize;
#[derive(Debug, Serialize)]
pub struct RollbackResult {
pub path: String,
pub file_hash: String,
pub header: String,
pub replaced_hash: String,
pub warning: Option<String>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub lsp_notes: Option<super::types::LspNotes>,
}
pub async fn rollback(
config: &FsRollback,
metadata: FsMetadata,
path: &str,
hash: &str,
) -> Result<RollbackResult, String> {
let _ = config;
let validated_path = metadata
.fs_guard(path)
.map_err(|e| format!("restore permission denied for `{path}`; {e}",))?;
let path_str = validated_path.to_string_lossy().to_string();
let hash = hash.trim();
let hash = if hash.is_empty() {
None
} else {
Some(hash.to_owned())
};
let out = restore(RestoreInput {
path: path_str,
hash,
})
.await?;
Ok(RollbackResult {
path: out.path,
file_hash: out.file_hash,
header: out.header,
replaced_hash: out.replaced_hash,
warning: out.warning,
lsp_notes: None,
})
}