boreholeio 0.1.0

A library for interacting with borehole.io, a subsurface data management, delivery and visualisation platform
Documentation
use super::{Base, ChannelAxis, Error, NumericAxis};
use crate::{array_cache::UriResolvable, schema::array_uri_reference::AbsoluteUri};
use ndarray::SliceInfoElem;
use serde::{Deserialize, Serialize};

#[derive(Clone, Debug, Deserialize, Serialize)]
pub struct CompositeAxis {
    pub descriptors: Vec<NumericAxis>,
}

impl Base for CompositeAxis {
    fn size(&self) -> Result<usize, Error> {
        if self.descriptors.is_empty() {
            Err("Empty CompositeAxis.descriptors".into())
        } else {
            self.descriptors[0].size()
        }
    }

    fn slice(&self, slice_info: &SliceInfoElem) -> Result<ChannelAxis, Error> {
        let mut sliced = Vec::<NumericAxis>::with_capacity(self.descriptors.len());
        for axis in &self.descriptors {
            sliced.push(axis.slice(slice_info)?.try_into()?);
        }
        Ok(Self {
            descriptors: sliced,
        }
        .into())
    }
}

impl UriResolvable for CompositeAxis {
    fn set_base_for_relative_uris(&mut self, base_uri: &AbsoluteUri) {
        for component in &mut self.descriptors {
            component.set_base_for_relative_uris(base_uri);
        }
    }
}