34 const std::string type_name =
"fasta_file";
35 const auto& famap = internal_json::extract_typed_object_from_metadata(metadata.
other, type_name);
37 const std::string version_name =
"version";
38 const std::string& vstring = internal_json::extract_string_from_typed_object(famap, version_name, type_name);
39 auto version = ritsuko::parse_version_string(vstring.c_str(), vstring.size(),
true);
40 if (version.major != 1) {
41 throw std::runtime_error(
"unsupported version string '" + vstring +
"'");
44 internal_files::check_sequence_type(famap, type_name.c_str());
47 bool indexed = internal_files::is_indexed(famap);
48 auto fpath = path /
"file.fasta.";
55 internal_files::check_gzip_signature(fpath);
57 auto reader = internal_other::open_reader<byteme::GzipFileReader>(fpath, byteme::GzipFileReaderOptions());
59 if (reader->read(
reinterpret_cast<unsigned char*
>(&first_char), 1) == 0 || first_char !=
'>') {
60 throw std::runtime_error(
"FASTA file does not start with '>'");
65 auto fixpath = path /
"file.fasta.fai";
66 if (!std::filesystem::exists(fixpath)) {
67 throw std::runtime_error(
"missing FASTA index file");
72 if (!std::filesystem::exists(ixpath)) {
73 throw std::runtime_error(
"missing BGZF index file");
void validate(const std::filesystem::path &path, const ObjectMetadata &metadata, Options &options)
Definition fasta_file.hpp:33
std::function< void(const std::filesystem::path &, const ObjectMetadata &, Options &, bool)> fasta_file_strict_check
Definition utils_public.hpp:198