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) { return static_cast<long long>(x); }
21
22constexpr bool operator==(BytesPerSecond lhs, BytesPerSecond rhs) { return ToLongLong(lhs) == ToLongLong(rhs); }
23
24constexpr bool operator!=(BytesPerSecond lhs, BytesPerSecond rhs) { return !(lhs == rhs); }
25
26/// Understands all the date-rate unit suffixes from
27/// https://en.wikipedia.org/wiki/Data-rate_units#Conversion_table
28BytesPerSecond StringToBytesPerSecond(const std::string& data);
29
30template <class Value>
31BytesPerSecond Parse(const Value& v, formats::parse::To<BytesPerSecond>) {
32 return StringToBytesPerSecond(v.template As<std::string>());
33}
34
35} // namespace utils
36
37USERVER_NAMESPACE_END