#pragma once
#include <cstdint>

namespace Generated
{
    struct Serializer;
    struct Deserializer;
    struct KnownType
    {
        static constexpr int32_t EntryCount = 12;
        static constexpr uint32_t Hash = 2024002654;
        enum Enum : int32_t
        {
            i8,
            i16,
            i32,
            i64,
            u8,
            u16,
            u32,
            u64,
            b,
            f32,
            f64,
            str,
        };
        static constexpr char EntryNames[EntryCount][64]
        {
            "i8",
            "i16",
            "i32",
            "i64",
            "u8",
            "u16",
            "u32",
            "u64",
            "b",
            "f32",
            "f64",
            "str",
        };
        static constexpr char CName[EntryCount][64]
        {
            "int8_t",
            "int16_t",
            "int32_t",
            "int64_t",
            "uint8_t",
            "uint16_t",
            "uint32_t",
            "uint64_t",
            "bool",
            "float",
            "double",
            "char",
        };
    };
    struct Test
    {
        static constexpr uint32_t Hash = 273256278;
        uint32_t Number = {};
    };
    struct Texture
    {
        static constexpr uint32_t Hash = 992460010;
        uint32_t Width = {};
        uint32_t Height = {};
        char StrTest[3] = {};
        Test T = {};
    };
    bool Save(const KnownType::Enum* obj, uint32_t count, Serializer& serializer);
    bool Load(KnownType::Enum* obj, uint32_t count, Deserializer& serializer);
    bool Save(const Test* obj, uint32_t count, Serializer& serializer);
    bool Load(Test* obj, uint32_t count, Deserializer& serializer);
    bool Save(const Texture* obj, uint32_t count, Serializer& serializer);
    bool Load(Texture* obj, uint32_t count, Deserializer& serializer);
}
