1use crate::errors::ConnectorXError;
5use fehler::{throw, throws};
6#[derive(Copy, Clone, Eq, PartialEq, Debug)]
7pub enum DataOrder {
8 RowMajor,
9 ColumnMajor,
10}
11
12#[throws(ConnectorXError)]
15pub fn coordinate(src: &[DataOrder], dst: &[DataOrder]) -> DataOrder {
16 assert!(!src.is_empty() && !dst.is_empty());
17
18 match (src, dst) {
19 ([s, ..], [d, ..]) if s == d => *s,
20 ([s, ..], [_, d, ..]) if s == d => *s,
21 ([_, s, ..], [d, ..]) if s == d => *s,
22 _ => throw!(ConnectorXError::CannotResolveDataOrder(
23 src.to_vec(),
24 dst.to_vec()
25 )),
26 }
27}