v0.2.5-pre.010.fix.001
This commit is contained in:
@@ -1,10 +1,10 @@
|
||||
// file: crates/ksp-wallet-lib/src/persistence.rs
|
||||
// version: 6
|
||||
// version: 7
|
||||
|
||||
//! Async-first native Wallet V1 filesystem persistence.
|
||||
|
||||
use std::io::Read; // rust-rules: derive-import
|
||||
use std::io::Write; // rust-rules: derive-import
|
||||
use std::io::Read; // rust-rules: trait-import
|
||||
use std::io::Write; // rust-rules: trait-import
|
||||
|
||||
/// Creates a new native `.kspwallet` V1 at `destination` without overwriting an existing path.
|
||||
///
|
||||
@@ -83,10 +83,12 @@ pub async fn inspect_locked_wallet_file_v1(source: impl std::convert::AsRef<std:
|
||||
return crate::inspect_locked_wallet_v1(bytes.as_slice());
|
||||
}
|
||||
|
||||
/// Persists new wallet content v1.
|
||||
pub(crate) async fn persist_new_wallet_content_v1(destination: std::path::PathBuf, content: std::vec::Vec<u8>) -> ksp_core_lib::Result<()> {
|
||||
return persist_new_wallet_async(destination, content).await;
|
||||
}
|
||||
|
||||
/// Replaces wallet file v1.
|
||||
pub(crate) async fn replace_wallet_file_v1(
|
||||
destination: std::path::PathBuf,
|
||||
expected_current: crate::KspWalletEnvelopeV1,
|
||||
@@ -131,7 +133,6 @@ fn read_wallet_file_blocking(source: &std::path::Path) -> ksp_core_lib::Result<s
|
||||
if metadata.len() > crate::KSPWALLET_MAX_FILE_BYTES as u64 {
|
||||
return std::result::Result::Err(oversized_document_error());
|
||||
}
|
||||
|
||||
let capacity = std::cmp::min(metadata.len(), crate::KSPWALLET_MAX_FILE_BYTES as u64) as usize;
|
||||
let mut bytes = std::vec::Vec::with_capacity(capacity);
|
||||
let mut bounded = file.take((crate::KSPWALLET_MAX_FILE_BYTES + 1) as u64);
|
||||
@@ -175,7 +176,7 @@ fn verify_expected_wallet_state(destination: &std::path::Path, expected_current:
|
||||
std::result::Result::Ok(value) => value,
|
||||
std::result::Result::Err(error) => return std::result::Result::Err(error),
|
||||
};
|
||||
let verify_result = crate::wallet::verify_state_signature(¤t);
|
||||
let verify_result = crate::verify_state_signature(¤t);
|
||||
if let std::result::Result::Err(error) = verify_result {
|
||||
return std::result::Result::Err(error);
|
||||
}
|
||||
@@ -207,7 +208,6 @@ where
|
||||
if !existing_metadata.is_file() {
|
||||
return std::result::Result::Err(atomic_error("replace_destination", "Wallet replacement destination is not a regular file"));
|
||||
}
|
||||
|
||||
let temporary_result = tempfile::Builder::new().prefix(".kspwallet-replace-").suffix(".tmp").tempfile_in(parent);
|
||||
let mut temporary = match temporary_result {
|
||||
std::result::Result::Ok(value) => value,
|
||||
@@ -225,7 +225,6 @@ where
|
||||
if let std::result::Result::Err(error) = hook_result {
|
||||
return std::result::Result::Err(error);
|
||||
}
|
||||
|
||||
let persist_result = temporary.persist(destination);
|
||||
let persisted = match persist_result {
|
||||
std::result::Result::Ok(value) => value,
|
||||
@@ -254,7 +253,6 @@ where
|
||||
if destination.file_name().is_none() {
|
||||
return std::result::Result::Err(atomic_error("destination", "Wallet destination has no file name"));
|
||||
}
|
||||
|
||||
let temporary_result = tempfile::Builder::new().prefix(".kspwallet-write-").suffix(".tmp").tempfile_in(parent);
|
||||
let mut temporary = match temporary_result {
|
||||
std::result::Result::Ok(value) => value,
|
||||
@@ -268,12 +266,10 @@ where
|
||||
if let std::result::Result::Err(error) = sync_result {
|
||||
return std::result::Result::Err(atomic_io_error("temporary_sync", error));
|
||||
}
|
||||
|
||||
let hook_result = before_publish();
|
||||
if let std::result::Result::Err(error) = hook_result {
|
||||
return std::result::Result::Err(error);
|
||||
}
|
||||
|
||||
let persist_result = temporary.persist_noclobber(destination);
|
||||
let persisted = match persist_result {
|
||||
std::result::Result::Ok(value) => value,
|
||||
@@ -371,6 +367,7 @@ fn blocking_atomic_error(operation: &'static str, source: tokio::task::JoinError
|
||||
.with_source(source);
|
||||
}
|
||||
|
||||
/// Persists new wallet fault before publish.
|
||||
#[cfg(test)]
|
||||
pub(crate) fn persist_new_wallet_fault_before_publish(destination: &std::path::Path, content: &[u8]) -> ksp_core_lib::Result<()> {
|
||||
return persist_new_wallet_with_hook(destination, content, || {
|
||||
@@ -378,11 +375,13 @@ pub(crate) fn persist_new_wallet_fault_before_publish(destination: &std::path::P
|
||||
});
|
||||
}
|
||||
|
||||
/// Persists new wallet for test.
|
||||
#[cfg(test)]
|
||||
pub(crate) fn persist_new_wallet_for_test(destination: &std::path::Path, content: &[u8]) -> ksp_core_lib::Result<()> {
|
||||
return persist_new_wallet_blocking(destination, content);
|
||||
}
|
||||
|
||||
/// Replaces wallet fault before publish.
|
||||
#[cfg(test)]
|
||||
pub(crate) fn replace_wallet_fault_before_publish(destination: &std::path::Path, content: &[u8]) -> ksp_core_lib::Result<()> {
|
||||
return replace_wallet_file_with_hook(destination, content, || {
|
||||
@@ -390,6 +389,7 @@ pub(crate) fn replace_wallet_fault_before_publish(destination: &std::path::Path,
|
||||
});
|
||||
}
|
||||
|
||||
/// Replaces wallet for test.
|
||||
#[cfg(test)]
|
||||
pub(crate) fn replace_wallet_for_test(destination: &std::path::Path, content: &[u8]) -> ksp_core_lib::Result<()> {
|
||||
return replace_wallet_file_blocking(destination, content);
|
||||
|
||||
Reference in New Issue
Block a user