Skip to main content

keepass_ng/db/
save.rs

1use crate::{DatabaseKey, db::types::Database, format::DatabaseVersion};
2
3/// Errors occurring when saving a database.
4#[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    /// Save a database to a `std::io::Write`
24    #[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}