1use crate::{DatabaseKey, db::types::Database, format::DatabaseVersion};
2
3#[derive(Debug, thiserror::Error)]
5pub enum DatabaseSaveError {
6 #[error("Saving this database version is not supported")]
7 UnsupportedVersion,
8
9 #[error(transparent)]
10 Serialization(#[from] quick_xml::SeError),
11
12 #[error(transparent)]
13 Io(#[from] std::io::Error),
14 #[error(transparent)]
15 Key(#[from] crate::key::DatabaseKeyError),
16 #[error(transparent)]
17 Cryptography(#[from] crate::crypt::CryptographyError),
18 #[error(transparent)]
19 Random(#[from] getrandom::Error),
20}
21
22impl Database {
23 #[cfg(feature = "save_kdbx4")]
25 pub fn save(&self, destination: &mut dyn std::io::Write, key: DatabaseKey) -> Result<(), DatabaseSaveError> {
26 use crate::format::kdbx4::dump_kdbx4;
27
28 match self.config.version {
29 DatabaseVersion::KDB(_) => Err(DatabaseSaveError::UnsupportedVersion),
30 DatabaseVersion::KDB2(_) => Err(DatabaseSaveError::UnsupportedVersion),
31 DatabaseVersion::KDB3(_) => Err(DatabaseSaveError::UnsupportedVersion),
32 DatabaseVersion::KDB4(_) => dump_kdbx4(self, &key, destination),
33 }
34 }
35}