userver: userver/utils/bytes_per_second.hpp Source File
Loading...
Searching...
No Matches
bytes_per_second.hpp
Go to the documentation of this file.
1#pragma once
2
3/// @file userver/utils/bytes_per_second.hpp
4/// @brief @copybrief utils::BytesPerSecond
5/// @ingroup userver_universal
6
7#include <string>
8
9#include <userver/formats/parse/to.hpp>
10
11USERVER_NAMESPACE_BEGIN
12
13namespace utils {
14
15/// @ingroup userver_universal userver_containers
16///
17/// @brief Data type that represents `bytes per second` unit
18enum class BytesPerSecond : long long {};
19
20constexpr long long ToLongLong(BytesPerSecond x) {
21 return static_cast<long long>(x);
22}
23
24constexpr bool operator==(BytesPerSecond lhs, BytesPerSecond rhs) {
25 return ToLongLong(lhs) == ToLongLong(rhs);
26}
27
28constexpr bool operator!=(BytesPerSecond lhs, BytesPerSecond rhs) {
29 return !(lhs == rhs);
30}
31
32/// Understands all the date-rate unit suffixes from
33/// https://en.wikipedia.org/wiki/Data-rate_units#Conversion_table
34BytesPerSecond StringToBytesPerSecond(const std::string& data);
35
36template <class Value>
37BytesPerSecond Parse(const Value& v, formats::parse::To<BytesPerSecond>) {
38 return StringToBytesPerSecond(v.template As<std::string>());
39}
40
41} // namespace utils
42
43USERVER_NAMESPACE_END