| #pragma once | 
 |  | 
 | #include <cstdint> | 
 | #include <string> | 
 |  | 
 | namespace ethstats | 
 | { | 
 |  | 
 | class EthStatsInterface | 
 | { | 
 |   public: | 
 |     virtual ~EthStatsInterface() = default; | 
 |  | 
 |     /** Given an ifname and a statistic, validate both. | 
 |      * | 
 |      * @param[in] path - the interface name and statistics field | 
 |      * @return true if both valid, false otherwise. | 
 |      */ | 
 |     virtual bool validIfNameAndField(const std::string& path) const = 0; | 
 |  | 
 |     /** Given an ifname and a statistic, return the value. | 
 |      * | 
 |      * @param[in] path - the interface name and statistics field | 
 |      * @return the value of that statistic for that interface. | 
 |      */ | 
 |     virtual std::uint64_t readStatistic(const std::string& path) const = 0; | 
 | }; | 
 |  | 
 | class EthStats : public EthStatsInterface | 
 | { | 
 |   public: | 
 |     EthStats() = default; | 
 |     ~EthStats() = default; | 
 |  | 
 |     bool validIfNameAndField(const std::string& path) const override; | 
 |     std::uint64_t readStatistic(const std::string& path) const override; | 
 | }; | 
 |  | 
 | } // namespace ethstats |