breez_sdk_spark/persist/
path.rs

1use std::{path::PathBuf, str::FromStr};
2
3use bitcoin::hashes::{Hash, sha256};
4
5use crate::{Network, SdkError, Seed};
6
7pub fn default_storage_path(
8    data_dir: &str,
9    network: &Network,
10    seed: &Seed,
11) -> Result<PathBuf, SdkError> {
12    let storage_dir = std::path::PathBuf::from_str(data_dir)?;
13    let path_suffix: String = match seed {
14        crate::Seed::Mnemonic {
15            mnemonic,
16            passphrase,
17        } => {
18            // Ensure mnemonic is valid before proceeding
19            bip39::Mnemonic::parse(mnemonic)
20                .map_err(|e| SdkError::InvalidInput(format!("Invalid mnemonic: {e}")))?;
21            let str = format!("{mnemonic}:{passphrase:?}");
22            sha256::Hash::hash(str.as_bytes())
23                .to_string()
24                .chars()
25                .take(8)
26                .collect()
27        }
28        crate::Seed::Entropy(vec) => sha256::Hash::hash(vec.as_slice())
29            .to_string()
30            .chars()
31            .take(8)
32            .collect(),
33    };
34
35    Ok(storage_dir
36        .join(network.to_string().to_lowercase())
37        .join(path_suffix))
38}