use File::KDBX::Constants qw(:magic :header :version);
use File::KDBX::Error;
-use File::KDBX::Util qw(:io);
+use File::KDBX::Util qw(:class :io);
use File::KDBX;
use IO::Handle;
use Module::Load ();
=attr format
-TODO
+Get the file format used for reading the database. Normally the format is auto-detected from the data stream.
+This auto-detection works well, so there's not really a good reason to explicitly specify the format.
+Possible formats:
+
+=for :list
+* C<V3>
+* C<V4>
+* C<KDB>
+* C<XML>
+* C<Raw>
+
+=attr inner_format
+
+Get the format of the data inside the KDBX envelope. This only applies to C<V3> and C<V4> formats. Possible
+formats:
+
+=for :list
+* C<XML> - Read the database groups and entries as XML (default)
+* C<Raw> - Read parsing and store the result in L<File::KDBX/raw>
=cut
-sub format { $_[0]->{format} }
-sub inner_format { $_[0]->{inner_format} // 'XML' }
+has format => undef, is => 'ro';
+has inner_format => 'XML', is => 'ro';
-=attr min_version
+=method min_version
$min_version = File::KDBX::Loader->min_version;
my $headers = $self->_read_headers($fh);
- $self->_read_body($fh, $key, "$magic$headers");
+ eval {
+ $self->_read_body($fh, $key, "$magic$headers");
+ };
+ if (my $err = $@) {
+ throw "Failed to load KDBX file: $err",
+ error => $err,
+ compression_error => $IO::Uncompress::Gunzip::GunzipError,
+ crypt_error => $File::KDBX::IO::Crypt::ERROR,
+ hash_error => $File::KDBX::IO::HashBLock::ERROR,
+ hmac_error => $File::KDBX::IO::HmacBLock::ERROR;
+ }
}
sub _read_headers {
}
1;
+__END__
+
+=head1 DESCRIPTION
+
+
+=cut