15#include <sharg/parser.hpp>
17#include <seqan3/io/sequence_file/input.hpp>
21namespace raptor::detail
25 seqan3::detail::valid_file_extensions<typename seqan3::sequence_file_input<>::valid_formats>()};
30#ifdef SEQAN3_HAS_BZIP2
43 if (compression_extensions.
empty())
44 return sequence_extensions;
46 for (
auto && sequence_extension : sequence_extensions)
49 for (
auto && compression_extension : compression_extensions)
62 using option_value_type = size_t;
64 void operator()(option_value_type
const & val)
const
67 throw sharg::validation_error{
"The value must be a power of two."};
72 return "Value must be a power of two.";
79 using option_value_type = size_t;
91 void operator()(option_value_type
const & val)
const
93 if (!is_zero_positive && !val)
94 throw sharg::validation_error{
"The value must be a positive integer."};
100 return "Value must be a positive integer or 0.";
102 return "Value must be a positive integer.";
106 bool is_zero_positive{
false};
127 throw sharg::validation_error{
128 seqan3::detail::to_string(
"Value ",
130 " must be an integer followed by [k,m,g,t] (case insensitive).")};
133 template <std::ranges::forward_range range_type>
134 requires std::convertible_to<std::ranges::range_value_t<range_type>,
option_value_type const &>
135 void operator()(range_type
const & v)
const
147 return "Must be an integer followed by [k,m,g,t] (case insensitive).";
169 throw sharg::validation_error{
"The list of input files cannot be empty."};
179 if (is_minimiser_input && (file_path.extension() !=
".minimiser"))
180 throw sharg::validation_error{
"You cannot mix sequence and minimiser files as input."};
182 throw sharg::validation_error{
"The file " + value +
" is empty."};
184 if (is_minimiser_input)
185 minimiser_file_validator(file_path);
194 return seqan3::detail::to_string(
"The file must contain at least one file path per line, with multiple paths "
195 "being separated by a whitespace. Each line in the file corresponds to one "
196 "bin. Valid extensions for the paths in the file are [minimiser] when "
197 " using preprocessed input from \\fBraptor prepare\\fP, and ",
198 raptor::detail::sequence_extensions,
199#
if defined(SEQAN3_HAS_BZIP2) || defined(SEQAN3_HAS_ZLIB)
200 ", possibly followed by ",
201 raptor::detail::compression_extensions,
207 sharg::input_file_validator minimiser_file_validator{{
"minimiser"}};
232 throw sharg::validation_error{
233 sharg::detail::to_string(
"Failed to create directory\"", out_dir.c_str(),
"\": ", ec.message())};
241 return "A valid path for the output directory.";
245 sharg::output_directory_validator validator{};
264 if (!out_dir.empty())
270 throw sharg::validation_error{
271 sharg::detail::to_string(
"Failed to create directory \"", out_dir.c_str(),
"\": ", ec.message())};
280 return "A valid path for the output file. Write permissions must be granted.";
284 sharg::output_file_validator validator{sharg::output_file_open_options::open_or_create};
290 using base_t = sharg::input_file_validator;
293 using base_t::base_t;
297 return seqan3::detail::to_string(
298 "The input file must exist and read permissions must be granted. Valid file extensions are ",
299 raptor::detail::sequence_extensions,
300#
if defined(SEQAN3_HAS_BZIP2) || defined(SEQAN3_HAS_ZLIB)
301 ", possibly followed by ",
302 raptor::detail::compression_extensions,
Definition: validators.hpp:155
Definition: validators.hpp:214
Definition: validators.hpp:249
Definition: validators.hpp:77
Definition: validators.hpp:288
Definition: validators.hpp:110
T create_directories(T... args)
T has_single_bit(T... args)
Definition: validators.hpp:61