Skip to content

Commit

Permalink
Added dz! macro into dataframe
Browse files Browse the repository at this point in the history
The main objective of macro dz! is to transpose mixed data type vectors, aka columns or dimensions into ECharts dataframe format.
  • Loading branch information
humphreylee authored Oct 11, 2024
1 parent 371ac0e commit 248554f
Showing 1 changed file with 66 additions and 0 deletions.
66 changes: 66 additions & 0 deletions charming/src/datatype/dataframe.rs
Original file line number Diff line number Diff line change
Expand Up @@ -69,3 +69,69 @@ macro_rules! df {
]
};
}

Check warning on line 71 in charming/src/datatype/dataframe.rs

View workflow job for this annotation

GitHub Actions / Linting and formatting

Diff in /home/runner/work/charming/charming/charming/src/datatype/dataframe.rs

Check warning on line 71 in charming/src/datatype/dataframe.rs

View workflow job for this annotation

GitHub Actions / Linting and formatting

Diff in /home/runner/work/charming/charming/charming/src/datatype/dataframe.rs

/// Code below is modified from ChatGPT generated code.
/// The main objective of macro dz! is to transpose mixed data type vectors,
/// aka columns or dimensions into ECharts dataframe format.
#[macro_export]
macro_rules! dz {
/*
Handle named vectors
let d1 = vec![44056, 13334];
let d2 = vec![81.8, 76.9];
let d3 = vec![23968973, 1376048943];
let d4 = vec!["Australia", "China"];

Check warning on line 84 in charming/src/datatype/dataframe.rs

View workflow job for this annotation

GitHub Actions / Linting and formatting

Diff in /home/runner/work/charming/charming/charming/src/datatype/dataframe.rs

Check warning on line 84 in charming/src/datatype/dataframe.rs

View workflow job for this annotation

GitHub Actions / Linting and formatting

Diff in /home/runner/work/charming/charming/charming/src/datatype/dataframe.rs
let d5 = vec![2015, 2015];
let df = dz!(d1, d2, d3, d4, d5);
>>df = [Value(Array([Number(Integer(44056)), Number(Float(81.8)),
Number(Integer(23968973)), String("Australia"), Number(Integer(2015))])),
Value(Array([Number(Integer(13334)), Number(Float(76.9)),
Number(Integer(1376048943)), String("China"), Number(Integer(2015))]))]
*/
($($v:expr),* $(,)?) => {{
let mut df = Vec::new();
let mut iterators: Vec<Box<dyn Iterator<Item = $crate::datatype::CompositeValue>>> = vec![

Check warning on line 94 in charming/src/datatype/dataframe.rs

View workflow job for this annotation

GitHub Actions / Linting and formatting

Diff in /home/runner/work/charming/charming/charming/src/datatype/dataframe.rs

Check warning on line 94 in charming/src/datatype/dataframe.rs

View workflow job for this annotation

GitHub Actions / Linting and formatting

Diff in /home/runner/work/charming/charming/charming/src/datatype/dataframe.rs
$(Box::new($v.into_iter().map(|x| $crate::datatype::CompositeValue::from(x))),)*
];

let len = iterators.first().map(|v| v.size_hint().0).unwrap_or(0);

for _ in 0..len {
let mut row = Vec::new();
for iter in iterators.iter_mut() {
if let Some(value) = iter.next() {
row.push(value);
}
}
let z = $crate::datatype::DataPoint::from(row);
df.push(z);
}

Check warning on line 109 in charming/src/datatype/dataframe.rs

View workflow job for this annotation

GitHub Actions / Linting and formatting

Diff in /home/runner/work/charming/charming/charming/src/datatype/dataframe.rs

Check warning on line 109 in charming/src/datatype/dataframe.rs

View workflow job for this annotation

GitHub Actions / Linting and formatting

Diff in /home/runner/work/charming/charming/charming/src/datatype/dataframe.rs
df
}};

/*
Handle direct input of vectors
let df = dz!([44056, 13334], [81.8, 76.9], [23968973, 1376048943], ["Australia", "China"], [2015, 2015]);
>>df = [Value(Array([Number(Integer(44056)), Number(Float(81.8)),

Check warning on line 116 in charming/src/datatype/dataframe.rs

View workflow job for this annotation

GitHub Actions / Linting and formatting

Diff in /home/runner/work/charming/charming/charming/src/datatype/dataframe.rs

Check warning on line 116 in charming/src/datatype/dataframe.rs

View workflow job for this annotation

GitHub Actions / Linting and formatting

Diff in /home/runner/work/charming/charming/charming/src/datatype/dataframe.rs
Number(Integer(23968973)), String("Australia"), Number(Integer(2015))])),
Value(Array([Number(Integer(13334)), Number(Float(76.9)),
Number(Integer(1376048943)), String("China"), Number(Integer(2015))]))]
*/
($([$($v:expr),*]),* $(,)?) => {{
let mut df = Vec::new();
let mut iterators: Vec<_> = vec![$(vec![$($v.into()),*].into_iter()),*];

let len = iterators.first().map(|v| v.len()).unwrap_or(0);
for _ in 0..len {
let mut row = Vec::new();
for iter in &mut iterators {
if let Some($crate::datatype::CompositeValue) = iter.next() {
row.push($crate::datatype::CompositeValue);
}
}
df.push(row);
}
df
}};
}

0 comments on commit 248554f

Please sign in to comment.