aboutsummaryrefslogtreecommitdiffstats
path: root/yql/essentials/public/langver/yql_langver.h
blob: 7b58484f1d6723e09082aaaf3dc3380c1675a5ba (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
#pragma once
#include <util/generic/strbuf.h>
#include <util/system/types.h>

#include <array>

namespace NYql {

using TLangVersion = ui32;

constexpr TLangVersion UnknownLangVersion = 0;

constexpr inline TLangVersion MakeLangVersion(ui32 year, ui32 minor) {
    return year * 100u + minor;
}

constexpr inline ui32 GetYearFromLangVersion(TLangVersion ver) {
    return ver / 100u;
}

constexpr inline ui32 GetMinorFromLangVersion(TLangVersion ver) {
    return ver % 100u;
}

constexpr inline bool IsAvailableLangVersion(TLangVersion ver, TLangVersion max) {
    if (ver == UnknownLangVersion || max == UnknownLangVersion) {
        return true;
    }

    return ver <= max;
}

constexpr inline bool IsDeprecatedLangVersion(TLangVersion ver, TLangVersion max) {
    if (ver == UnknownLangVersion || max == UnknownLangVersion) {
        return false;
    }

    return GetYearFromLangVersion(ver) == GetYearFromLangVersion(max) - 2;
}

constexpr inline bool IsUnsupportedLangVersion(TLangVersion ver, TLangVersion max) {
    if (ver == UnknownLangVersion || max == UnknownLangVersion) {
        return false;
    }

    return GetYearFromLangVersion(ver) <= GetYearFromLangVersion(max) - 3;
}

constexpr TLangVersion MinLangVersion = MakeLangVersion(2025, 1);

TLangVersion GetMaxReleasedLangVersion();
TLangVersion GetMaxLangVersion();

constexpr ui32 LangVersionBufferSize = 4 + 1 + 2 + 1; // year.minor\0
using TLangVersionBuffer = std::array<char, LangVersionBufferSize>;

bool IsValidLangVersion(TLangVersion ver);
bool ParseLangVersion(TStringBuf str, TLangVersion& result);
bool FormatLangVersion(TLangVersion ver, TLangVersionBuffer& buffer, TStringBuf& result);

enum class EBackportCompatibleFeaturesMode {
    None,
    Released,
    All
};

bool IsBackwardCompatibleFeatureAvailable(TLangVersion currentVer, TLangVersion featureVer,
    EBackportCompatibleFeaturesMode mode);

}