fix: Retain unknown columns when mangling headers on CSV import
This commit is contained in:
parent
ad57482dea
commit
108a2677e3
|
@ -5,6 +5,8 @@ pub fn mangle_headers(data: &str) -> String {
|
||||||
for field in fields {
|
for field in fields {
|
||||||
if let Some(f) = detect_field(field) {
|
if let Some(f) = detect_field(field) {
|
||||||
modified_headers.push(f.to_string());
|
modified_headers.push(f.to_string());
|
||||||
|
} else {
|
||||||
|
log::debug!("Unk field: {:?}", field)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -12,22 +14,25 @@ pub fn mangle_headers(data: &str) -> String {
|
||||||
}
|
}
|
||||||
|
|
||||||
fn detect_field(field: &str) -> Option<Field> {
|
fn detect_field(field: &str) -> Option<Field> {
|
||||||
|
// NOTE: Don't return none! Consider refactor to -> Field later on.
|
||||||
|
// Returning none means a field will be dropped, which requires the user to manually drop
|
||||||
|
// columns from their picklist.
|
||||||
match field.trim().to_lowercase() {
|
match field.trim().to_lowercase() {
|
||||||
x if x.contains("source") || x.contains("src") => match x {
|
x if x.contains("source") || x.contains("src") => match x {
|
||||||
_ if x.contains("plate") => Some(Field::SourcePlate),
|
_ if x.contains("plate") || x.contains("barcode") => Some(Field::SourcePlate),
|
||||||
_ if x.contains("well") => Some(Field::SourceWell),
|
_ if x.contains("well") => Some(Field::SourceWell),
|
||||||
_ if x.contains("format") || x.contains("fmt") => Some(Field::SourceFormat),
|
_ if x.contains("format") || x.contains("fmt") => Some(Field::SourceFormat),
|
||||||
_ => None,
|
_ => Some(Field::Other(x)), // Retain unknown fields
|
||||||
},
|
},
|
||||||
x if x.contains("destination") || x.contains("dest") => match x {
|
x if x.contains("destination") || x.contains("dest") => match x {
|
||||||
_ if x.contains("plate") => Some(Field::DestinationPlate),
|
_ if x.contains("plate") || x.contains("barcode") => Some(Field::DestinationPlate),
|
||||||
_ if x.contains("well") => Some(Field::DestinationWell),
|
_ if x.contains("well") => Some(Field::DestinationWell),
|
||||||
_ if x.contains("format") || x.contains("fmt") => Some(Field::DestinationFormat),
|
_ if x.contains("format") || x.contains("fmt") => Some(Field::DestinationFormat),
|
||||||
_ => None,
|
_ => Some(Field::Other(x)), // Retain unknown fields
|
||||||
},
|
},
|
||||||
x if x.contains("volume") => Some(Field::Volume),
|
x if x.contains("volume") => Some(Field::Volume),
|
||||||
x if x.contains("concentration") => Some(Field::Concentration),
|
x if x.contains("concentration") => Some(Field::Concentration),
|
||||||
_ => None,
|
x => Some(Field::Other(x)), // Retain unknown fields
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -40,6 +45,7 @@ enum Field {
|
||||||
DestinationFormat,
|
DestinationFormat,
|
||||||
Volume,
|
Volume,
|
||||||
Concentration,
|
Concentration,
|
||||||
|
Other(String),
|
||||||
}
|
}
|
||||||
|
|
||||||
impl ToString for Field {
|
impl ToString for Field {
|
||||||
|
@ -53,6 +59,7 @@ impl ToString for Field {
|
||||||
Field::DestinationFormat => "destinationformat".to_string(),
|
Field::DestinationFormat => "destinationformat".to_string(),
|
||||||
Field::Volume => "volume".to_string(),
|
Field::Volume => "volume".to_string(),
|
||||||
Field::Concentration => "concentration".to_string(),
|
Field::Concentration => "concentration".to_string(),
|
||||||
|
Field::Other(x) => x.to_string(),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue