use bitflags::bitflags;
#[derive(Copy, Clone, Debug)]
pub struct Config {
pub structs: KvOpts,
pub maps: KvOpts,
pub global: GlobalOpts,
}
impl Default for Config {
fn default() -> Config { RUSTY }
}
bitflags! {
pub struct KvOpts: u8 {
const STRUCT_LIKE = 0b00000001;
const MATCH_LIKE = 0b00000010;
const STATEMENT_LIKE = 0b00000100;
const TUPLE_ARRAY = 0b00001000;
const ATTRIBUTE_LIKE = 0b00010000;
const STRING_IDENTS = 0b00100000;
const BARE_UNIT = 0b00000100;
}
}
bitflags! {
pub struct GlobalOpts: u8 {
const BARE_STRUCTS = 0b00000001;
const BARE_ENUMS = 0b00000010;
const BARE_OPTION = 0b00010000;
const UNGROUPED_ROOT = 0b00000100;
const STRING_IDENTS = 0b00001000;
}
}
pub const JSONY: Config = Config {
structs: KvOpts::from_bits_truncate(
KvOpts::STRING_IDENTS.bits |
KvOpts::STRUCT_LIKE.bits),
maps: KvOpts::from_bits_truncate(
KvOpts::STRING_IDENTS.bits |
KvOpts::STRUCT_LIKE.bits |
KvOpts::TUPLE_ARRAY.bits),
global: GlobalOpts::from_bits_truncate(
GlobalOpts::BARE_STRUCTS.bits |
GlobalOpts::BARE_ENUMS.bits |
GlobalOpts::STRING_IDENTS.bits |
GlobalOpts::BARE_OPTION.bits),
};
pub const RUSTY: Config = Config {
structs: KvOpts::from_bits_truncate(
KvOpts::STRUCT_LIKE.bits |
KvOpts::STATEMENT_LIKE.bits),
maps: KvOpts::from_bits_truncate(
KvOpts::STRUCT_LIKE.bits |
KvOpts::STATEMENT_LIKE.bits |
KvOpts::MATCH_LIKE.bits |
KvOpts::TUPLE_ARRAY.bits),
global: GlobalOpts::from_bits_truncate(
GlobalOpts::STRING_IDENTS.bits |
GlobalOpts::BARE_OPTION.bits),
};
pub const RUSTY_STRICT: Config = Config {
structs: KvOpts::STRUCT_LIKE,
maps: KvOpts::TUPLE_ARRAY,
global: GlobalOpts::empty(),
};
pub const RUSTY_META: Config = Config {
structs: KvOpts::from_bits_truncate(
KvOpts::ATTRIBUTE_LIKE.bits |
KvOpts::STATEMENT_LIKE.bits |
KvOpts::BARE_UNIT.bits),
maps: KvOpts::from_bits_truncate(
KvOpts::ATTRIBUTE_LIKE.bits |
KvOpts::STATEMENT_LIKE.bits |
KvOpts::MATCH_LIKE.bits |
KvOpts::BARE_UNIT.bits),
global: GlobalOpts::from_bits_truncate(
GlobalOpts::BARE_STRUCTS.bits |
GlobalOpts::BARE_ENUMS.bits |
GlobalOpts::BARE_OPTION.bits |
GlobalOpts::STRING_IDENTS.bits |
GlobalOpts::UNGROUPED_ROOT.bits),
};
pub const ANYTHING_GOES: Config = Config {
structs: KvOpts::all(),
maps: KvOpts::all(),
global: GlobalOpts::all(),
};