use std::fmt;
use colored::Colorize;
bitflags::bitflags! {
#[derive(Debug, Eq, PartialEq, Ord, PartialOrd, Clone, Copy)]
pub struct Flags: u8 {
const NONE = 0b0000_0000;
const COMPRESSED = 0b0000_0001;
const ENCRYPTED = 0b0000_0010;
const ENCODED = 0b0000_0100;
const SIGNATURE = 0b0000_1000;
const OPTIMIZED = 0b0000_1111; }
}
impl Flags {
pub fn expect(&self, val: Flags) -> bool {
*self == val
}
}
impl fmt::Display for Flags {
fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
let mut flags = vec![];
if self.contains(Flags::COMPRESSED) {
flags.push("Compressed".cyan().to_string());
}
if self.contains(Flags::ENCRYPTED) {
flags.push("Encrypted".magenta().to_string());
}
if self.contains(Flags::ENCODED) {
flags.push("Encoded".blue().to_string());
}
if self.contains(Flags::SIGNATURE) {
flags.push("Signed".yellow().to_string());
}
if self.contains(Flags::OPTIMIZED) {
flags.push("SECURE".bright_green().bold().to_string());
}
write!(f, "{}", flags.join(", "))
}
}