package("yas")
    set_kind("library", {headeronly = true})
    set_homepage("https://github.com/niXman/yas")
    set_description("Yet Another Serialization")

    add_urls("https://github.com/niXman/yas.git")
    add_versions("2025.02.19", "1b37941f2196f4f59a37d34f1cd6dd3c6d2a2436")
    add_versions("2023.09.13", "7c5ced1d940ddc6826cf537468e65ea1f592bfe4")

    on_install(function (package)
        io.replace("include/yas/detail/config/endian.hpp",
        "|| defined(__ARM_ARCH_7S__)",
        "|| defined(__ARM_ARCH_7S__) || defined(_M_ARM64)", {plain = true})
        os.cp("include", package:installdir())
    end)

    on_test(function (package)
        assert(package:check_cxxsnippets({test = [[
            #include <yas/serialize.hpp>
            #include <yas/std_types.hpp>
            void test() {
                int a = 3, aa{};
                short b = 4, bb{};
                float c = 3.14, cc{};
                constexpr std::size_t flags = 
                    yas::mem // IO type
                    |yas::json; // IO format
                auto buf = yas::save<flags>(
                    YAS_OBJECT("myobject", a, b, c)
                );
                yas::load<flags>(buf,
                    YAS_OBJECT_NVP("myobject"
                        ,("a", aa)
                        ,("b", bb)
                        ,("c", cc)
                    )
                );
            }
        ]]}, {configs = {languages = "c++14"}}))
    end)
