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