vantage_table/mocks/
mock_column.rs1use crate::column::core::ColumnType;
6use crate::column::flags::ColumnFlag;
7use crate::traits::column_like::ColumnLike;
8use serde_json::Value;
9use std::collections::HashSet;
10use std::marker::PhantomData;
11use vantage_expressions::{Expression, Expressive, expr_any};
12
13#[derive(Debug, Clone)]
15pub struct MockColumn<T = Value>
16where
17 T: ColumnType,
18{
19 name: String,
20 flags: HashSet<ColumnFlag>,
21 _phantom: PhantomData<T>,
22}
23
24impl<T: ColumnType> MockColumn<T> {
25 pub fn new(name: impl Into<String>) -> Self {
27 Self {
28 name: name.into(),
29 flags: HashSet::new(),
30 _phantom: PhantomData,
31 }
32 }
33
34 pub fn into_type<T2: ColumnType>(self) -> MockColumn<T2>
35 where
36 T: ColumnType,
37 {
38 MockColumn::<T2> {
39 name: self.name,
40 flags: self.flags,
41 _phantom: PhantomData,
42 }
43 }
44}
45
46impl<T: ColumnType> Expressive<T> for MockColumn<T> {
47 fn expr(&self) -> Expression<T> {
48 expr_any!(self.name.clone())
49 }
50}
51
52impl<T: ColumnType> ColumnLike<T> for MockColumn<T> {
53 fn name(&self) -> &str {
54 &self.name
55 }
56
57 fn flags(&self) -> HashSet<ColumnFlag> {
58 self.flags.clone()
59 }
60
61 fn as_any(&self) -> &dyn std::any::Any {
62 self
63 }
64
65 fn into_any(self: Box<Self>) -> Box<dyn std::any::Any> {
66 self
67 }
68}
69
70#[cfg(test)]
71mod tests {
72 use super::*;
73
74 #[test]
75 fn test_mock_column_basic() {
76 let col = MockColumn::<Value>::new("test_column");
77 assert_eq!(col.name(), "test_column");
78 assert_eq!(col.alias(), None);
79 }
80}