xref: /aosp_15_r20/external/bazelbuild-rules_rust/rust/toolchain/channel/channel.bzl (revision d4726bddaa87cc4778e7472feed243fa4b6c267f)
1*d4726bddSHONG Yifan"""Rules for representing Rust toolchain channels"""
2*d4726bddSHONG Yifan
3*d4726bddSHONG Yifan_CHANNELS = [
4*d4726bddSHONG Yifan    "beta",
5*d4726bddSHONG Yifan    "nightly",
6*d4726bddSHONG Yifan    "stable",
7*d4726bddSHONG Yifan]
8*d4726bddSHONG Yifan
9*d4726bddSHONG YifanRustToolchainChannelInfo = provider(
10*d4726bddSHONG Yifan    doc = "A provider describing the Rust toolchain channel.",
11*d4726bddSHONG Yifan    fields = {
12*d4726bddSHONG Yifan        "value": "string: Can be {}".format(_CHANNELS),
13*d4726bddSHONG Yifan    },
14*d4726bddSHONG Yifan)
15*d4726bddSHONG Yifan
16*d4726bddSHONG Yifandef _rust_toolchain_channel_flag_impl(ctx):
17*d4726bddSHONG Yifan    value = ctx.build_setting_value
18*d4726bddSHONG Yifan    if value not in _CHANNELS:
19*d4726bddSHONG Yifan        fail(str(ctx.label) + " build setting allowed to take values {" +
20*d4726bddSHONG Yifan             ", ".join(_CHANNELS) + "} but was set to unallowed value " +
21*d4726bddSHONG Yifan             value)
22*d4726bddSHONG Yifan    return RustToolchainChannelInfo(value = value)
23*d4726bddSHONG Yifan
24*d4726bddSHONG Yifanrust_toolchain_channel_flag = rule(
25*d4726bddSHONG Yifan    doc = "A build setting which represents the Rust toolchain channel. The allowed values are {}".format(_CHANNELS),
26*d4726bddSHONG Yifan    implementation = _rust_toolchain_channel_flag_impl,
27*d4726bddSHONG Yifan    build_setting = config.string(
28*d4726bddSHONG Yifan        flag = True,
29*d4726bddSHONG Yifan    ),
30*d4726bddSHONG Yifan)
31