use crate::foundation::{GeoError, Result};
use std::path::Path;
#[derive(Debug, Clone)]
pub struct LasCurve {
pub mnemonic: String,
pub unit: String,
pub values: Vec<f64>,
}
#[derive(Debug, Clone)]
pub struct LasCurves {
pub index: Vec<f64>,
pub curves: Vec<LasCurve>,
}
fn map_err(e: las_rs::LasError) -> GeoError {
GeoError::Parse(format!("LAS: {e}"))
}
pub fn load(path: &Path) -> Result<LasCurves> {
let las = las_rs::read_file(path).map_err(map_err)?;
let index = las
.index()
.map(<[f64]>::to_vec)
.ok_or_else(|| GeoError::Parse("LAS: no index/depth curve".into()))?;
let mnemonics = las.curve_mnemonics();
let mut curves = Vec::with_capacity(mnemonics.len().saturating_sub(1));
for m in mnemonics.iter().skip(1) {
let values = las.curve_data(m).map(<[f64]>::to_vec).unwrap_or_default();
let unit = las
.get_curve(m)
.map(|c| c.header.unit.clone())
.unwrap_or_default();
curves.push(LasCurve {
mnemonic: (*m).to_string(),
unit,
values,
});
}
Ok(LasCurves { index, curves })
}