76class positive_integer_validator
79 using option_value_type = size_t;
81 positive_integer_validator() =
default;
82 positive_integer_validator(positive_integer_validator
const &) =
default;
83 positive_integer_validator & operator=(positive_integer_validator
const &) =
default;
84 positive_integer_validator(positive_integer_validator &&) =
default;
85 positive_integer_validator & operator=(positive_integer_validator &&) =
default;
86 ~positive_integer_validator() =
default;
88 explicit positive_integer_validator(
bool const is_zero_positive_) : is_zero_positive{is_zero_positive_}
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};
114 size_validator() =
default;
115 size_validator(size_validator
const &) =
default;
116 size_validator & operator=(size_validator
const &) =
default;
117 size_validator(size_validator &&) =
default;
118 size_validator & operator=(size_validator &&) =
default;
119 ~size_validator() =
default;
121 explicit size_validator(
std::string const & pattern) : expression{pattern}
124 void operator()(option_value_type
const & cmp)
const
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).";
159 bin_validator() =
default;
160 bin_validator(bin_validator
const &) =
default;
161 bin_validator & operator=(bin_validator
const &) =
default;
162 bin_validator(bin_validator &&) =
default;
163 bin_validator & operator=(bin_validator &&) =
default;
164 ~bin_validator() =
default;
166 void operator()(option_value_type
const & values)
const
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);
187 sequence_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"}};
210 sharg::input_file_validator sequence_file_validator{raptor::detail::combined_extensions};
213class output_directory_validator
218 output_directory_validator() =
default;
219 output_directory_validator(output_directory_validator
const &) =
default;
220 output_directory_validator & operator=(output_directory_validator
const &) =
default;
221 output_directory_validator(output_directory_validator &&) =
default;
222 output_directory_validator & operator=(output_directory_validator &&) =
default;
223 ~output_directory_validator() =
default;
225 void operator()(option_value_type
const & value)
const
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{};
248class output_file_validator
253 output_file_validator() =
default;
254 output_file_validator(output_file_validator
const &) =
default;
255 output_file_validator & operator=(output_file_validator
const &) =
default;
256 output_file_validator(output_file_validator &&) =
default;
257 output_file_validator & operator=(output_file_validator &&) =
default;
258 ~output_file_validator() =
default;
260 void operator()(option_value_type
const & value)
const
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,