Skip to main content

vantage_table/mocks/
mock_column.rs

1//! Mock column implementation for testing
2//!
3//! Provides a simple column implementation that can be used across all mock DataSources.
4
5use 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/// Simple column implementation for testing mocks
14#[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    /// Create a new mock column with the given name
26    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}