#ifndef CPPALLY_R_RAW_H
#define CPPALLY_R_RAW_H

#include <cppally/r_concepts.h>

namespace cppally {

// In the future we will use std::byte
struct r_raw {
    unsigned char value;
    using value_type = unsigned char;

    // Constructors
    constexpr r_raw() noexcept : value{static_cast<unsigned char>(0)} {}

    // Conversion handling
    explicit constexpr r_raw(unsigned char x) noexcept : value{x} {}
    constexpr operator unsigned char() const noexcept { return value; }

    static constexpr r_raw na() noexcept {
        return r_raw(0);
    }

    constexpr bool is_na() const noexcept {
        return false;
      }
};

namespace internal {
inline constexpr r_raw na_raw = r_raw::na();
}

}

#endif
