pub struct FileType { name: String, hl_opts: HighlightingOptions, } #[derive(Default)] pub struct HighlightingOptions { numbers: bool, strings: bool, characters: bool, comments: bool, multiline_comments: bool, primary_keywords: Vec, secondary_keywords: Vec, } impl Default for FileType { fn default() -> Self { Self { name: String::from("No filetype"), hl_opts: HighlightingOptions::default(), } } } impl FileType { pub fn name(&self) -> String { self.name.clone() } pub fn highlighting_options(&self) -> &HighlightingOptions { &self.hl_opts } pub fn from(file_name: &str) -> Self { if file_name.ends_with(".rs") { return Self { name: String::from("Rust"), hl_opts: HighlightingOptions { numbers: true, strings: true, characters: true, comments: true, multiline_comments: true, primary_keywords: vec![ "as".to_string(), "break".to_string(), "const".to_string(), "continue".to_string(), "crate".to_string(), "else".to_string(), "enum".to_string(), "extern".to_string(), "false".to_string(), "fn".to_string(), "For".to_string(), "if".to_string(), "impl".to_string(), "in".to_string(), "let".to_string(), "loop".to_string(), "match".to_string(), "mod".to_string(), "move".to_string(), "mut".to_string(), "pub".to_string(), "ref".to_string(), "return".to_string(), "self".to_string(), "Self".to_string(), "static".to_string(), "struct".to_string(), "super".to_string(), "trait".to_string(), "true".to_string(), "type".to_string(), "unsafe".to_string(), "use".to_string(), "where".to_string(), "while".to_string(), "dyn".to_string(), "abstract".to_string(), "become".to_string(), "box".to_string(), "do".to_string(), "final".to_string(), "macro".to_string(), "overrid".to_string(), "priv".to_string(), "typeof".to_string(), "unsized".to_string(), "virtual".to_string(), "yield".to_string(), "async".to_string(), "await".to_string(), "try".to_string(), ], secondary_keywords: vec![ "bool".to_string(), "char".to_string(), "i8".to_string(), "i16".to_string(), "i32".to_string(), "i64".to_string(), "i128".to_string(), "isize".to_string(), "u8".to_string(), "u16".to_string(), "u32".to_string(), "u64".to_string(), "u128".to_string(), "usize".to_string(), "f32".to_string(), "f64".to_string(), ], }, }; } Self::default() } } impl HighlightingOptions { pub fn numbers(&self) -> bool { self.numbers } pub fn strings(&self) -> bool { self.strings } pub fn characters(&self) -> bool { self.characters } pub fn comments(&self) -> bool { self.comments } pub fn primary_keywords(&self) -> &Vec { &self.primary_keywords } pub fn secondary_keywords(&self) -> &Vec { &self.secondary_keywords } pub fn multiline_comments(&self) -> bool { self.multiline_comments } }