#pragma once #include #include #include #include "esp-idf/components/cbor/tinycbor/src/cbor.h" #include "result.hpp" namespace audio { class StreamInfo { public: enum ParseError { WRONG_TYPE, MISSING_MAP, CBOR_ERROR, }; static auto Create(const uint8_t* buffer, size_t length) -> cpp::result; StreamInfo(CborValue& map); StreamInfo() = default; StreamInfo(const StreamInfo&) = default; ~StreamInfo() = default; auto Path() const -> const std::optional& { return path_; } auto Channels() const -> const std::optional& { return channels_; } auto BitsPerSample() const -> const std::optional& { return bits_per_sample_; } auto SampleRate() const -> const std::optional& { return sample_rate_; } enum EncodeError { OUT_OF_MEMORY, }; auto WriteToMap(CborEncoder encoder) -> cpp::result; private: std::optional path_; std::optional channels_; std::optional bits_per_sample_; std::optional sample_rate_; }; } // namespace audio