userver: userver/utils/bytes_per_second.hpp Source File
⚠️ This is the documentation for an old userver version. Click here to switch to the latest version.
All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Modules Pages Concepts
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