Function broot::display::parse_cols
source · Expand description
return a Cols which tries to take the s setting into account but is guaranteed to have every Col exactly once.
Examples found in repository?
src/display/col.rs (line 151)
148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181
fn try_from(cc: &ColsConf) -> Result<Self, Self::Error> {
match cc {
ColsConf::Compact(s) => parse_cols_single_str(s),
ColsConf::Array(arr) => parse_cols(arr),
}
}
}
/// return a Cols which tries to take the s setting into account
/// but is guaranteed to have every Col exactly once.
#[allow(clippy::ptr_arg)] // &[String] won't compile on all platforms
pub fn parse_cols(arr: &Vec<String>) -> Result<Cols, ConfError> {
let mut cols = DEFAULT_COLS;
for (idx, s) in arr.iter().enumerate() {
if idx >= COLS_COUNT {
return Err(ConfError::InvalidCols {
details: format!("too long: {:?}", arr),
});
}
// we swap the cols, to ensure both keeps being present
let col = Col::from_str(s)?;
let dest_idx = col.index_in(&cols).unwrap(); // can't be none by construct
cols[dest_idx] = cols[idx];
cols[idx] = col;
}
debug!("cols from conf = {:?}", cols);
Ok(cols)
}
/// return a Cols which tries to take the s setting into account
/// but is guaranteed to have every Col exactly once.
pub fn parse_cols_single_str(s: &str) -> Result<Cols, ConfError> {
parse_cols(&s.chars().map(String::from).collect())
}