in crates/core/src/file_group/log_file/mod.rs [54:96]
fn parse_file_name(file_name: &str) -> Result<(String, String, String, String, String)> {
let err_msg = format!("Failed to parse file name '{file_name}' for log file.");
if !file_name.starts_with(LOG_FILE_PREFIX) {
return Err(CoreError::FileGroup(err_msg));
}
let file_name = &file_name[LOG_FILE_PREFIX.len_utf8()..];
let (file_id, rest) = file_name
.split_once('_')
.ok_or_else(|| CoreError::FileGroup(err_msg.clone()))?;
let (middle, file_write_token) = rest
.rsplit_once('_')
.ok_or_else(|| CoreError::FileGroup(err_msg.clone()))?;
let parts: Vec<&str> = middle.split('.').collect();
if parts.len() != 3 {
return Err(CoreError::FileGroup(err_msg.clone()));
}
let base_commit_timestamp = parts[0];
let log_file_extension = parts[1];
let log_file_version = parts[2];
if file_id.is_empty()
|| base_commit_timestamp.is_empty()
|| log_file_extension.is_empty()
|| log_file_version.is_empty()
|| file_write_token.is_empty()
{
return Err(CoreError::FileGroup(err_msg.clone()));
}
Ok((
file_id.to_string(),
base_commit_timestamp.to_string(),
log_file_extension.to_string(),
log_file_version.to_string(),
file_write_token.to_string(),
))
}