#ifndef WANDA_VARIANT_HPP #define WANDA_VARIANT_HPP #include #include #include #include namespace wanda { struct variant { explicit variant(GVariant * variant); ~variant(); template std::optional get() const { if(!m_value) { return std::nullopt; } if constexpr(std::is_same_v) { if(is_of_type(G_VARIANT_TYPE_BOOLEAN)) { return static_cast(g_variant_get_boolean(m_value)); } } else if constexpr(std::is_same_v) { if(is_of_type(G_VARIANT_TYPE_STRING)) { auto length = gsize{}; auto value = g_variant_get_string(m_value, &length); return std::string(value, static_cast(length)); } } return std::nullopt; } private: bool is_of_type(GVariantType const * const type) const; GVariant * const m_value; }; } #endif