1#[derive(Clone, Debug)]
3pub struct Config {
4 line_comment_delimiter: Option<String>,
5 spaces_per_tab: usize,
6}
7
8impl Default for Config {
9 fn default() -> Self {
10 Self {
11 line_comment_delimiter: None,
12 spaces_per_tab: 4,
13 }
14 }
15}
16
17impl Config {
18 pub fn is_valid_line_comment_delimiter(line_comment_delimiter: &str) -> bool {
22 !line_comment_delimiter.is_empty()
23 && !line_comment_delimiter.contains("\r")
24 && !line_comment_delimiter.contains("\n")
25 }
26
27 pub fn line_comment_delimiter(&self) -> Option<&str> {
29 self.line_comment_delimiter.as_deref()
30 }
31
32 pub unsafe fn set_line_comment_delimiter<S>(&mut self, line_comment_delimiter: S)
37 where
38 S: Into<String>,
39 {
40 let line_comment_delimiter: String = line_comment_delimiter.into();
41
42 debug_assert!(Self::is_valid_line_comment_delimiter(
43 line_comment_delimiter.as_str()
44 ));
45
46 self.line_comment_delimiter = Some(line_comment_delimiter.to_string());
47 }
48
49 pub unsafe fn with_line_comment_delimiter<S>(mut self, line_comment_delimiter: S) -> Self
54 where
55 S: Into<String>,
56 {
57 self.set_line_comment_delimiter(line_comment_delimiter);
58 self
59 }
60}
61
62impl Config {
63 pub fn spaces_per_tab(&self) -> usize {
67 self.spaces_per_tab
68 }
69
70 pub unsafe fn set_spaces_per_tab(&mut self, spaces_per_tab: usize) {
75 debug_assert_ne!(spaces_per_tab, 0);
76
77 self.spaces_per_tab = spaces_per_tab;
78 }
79
80 pub unsafe fn with_spaces_per_tab(mut self, spaces_per_tab: usize) -> Self {
85 debug_assert_ne!(spaces_per_tab, 0);
86
87 self.set_spaces_per_tab(spaces_per_tab);
88 self
89 }
90}