reifydb_core/value/column/push/
u8.rs

1// Copyright (c) reifydb.com 2025
2// This file is licensed under the AGPL-3.0-or-later, see license.md file
3
4use reifydb_type::SafeConvert;
5
6use crate::value::column::{data::ColumnData, push::Push};
7
8impl Push<u8> for ColumnData {
9	fn push(&mut self, value: u8) {
10		match self {
11			ColumnData::Float4(container) => match <u8 as SafeConvert<f32>>::checked_convert(value) {
12				Some(v) => container.push(v),
13				None => container.push_undefined(),
14			},
15			ColumnData::Float8(container) => match <u8 as SafeConvert<f64>>::checked_convert(value) {
16				Some(v) => container.push(v),
17				None => container.push_undefined(),
18			},
19			ColumnData::Uint1(container) => container.push(value),
20			ColumnData::Uint2(container) => match <u8 as SafeConvert<u16>>::checked_convert(value) {
21				Some(v) => container.push(v),
22				None => container.push_undefined(),
23			},
24			ColumnData::Uint4(container) => match <u8 as SafeConvert<u32>>::checked_convert(value) {
25				Some(v) => container.push(v),
26				None => container.push_undefined(),
27			},
28			ColumnData::Uint8(container) => match <u8 as SafeConvert<u64>>::checked_convert(value) {
29				Some(v) => container.push(v),
30				None => container.push_undefined(),
31			},
32			ColumnData::Uint16(container) => match <u8 as SafeConvert<u128>>::checked_convert(value) {
33				Some(v) => container.push(v),
34				None => container.push_undefined(),
35			},
36			ColumnData::Int1(container) => match <u8 as SafeConvert<i8>>::checked_convert(value) {
37				Some(v) => container.push(v),
38				None => container.push_undefined(),
39			},
40			ColumnData::Int2(container) => match <u8 as SafeConvert<i16>>::checked_convert(value) {
41				Some(v) => container.push(v),
42				None => container.push_undefined(),
43			},
44			ColumnData::Int4(container) => match <u8 as SafeConvert<i32>>::checked_convert(value) {
45				Some(v) => container.push(v),
46				None => container.push_undefined(),
47			},
48			ColumnData::Int8(container) => match <u8 as SafeConvert<i64>>::checked_convert(value) {
49				Some(v) => container.push(v),
50				None => container.push_undefined(),
51			},
52			ColumnData::Int16(container) => match <u8 as SafeConvert<i128>>::checked_convert(value) {
53				Some(v) => container.push(v),
54				None => container.push_undefined(),
55			},
56			ColumnData::Undefined(container) => {
57				let mut new_container = ColumnData::uint1(vec![0u8; container.len()]);
58				if let ColumnData::Uint1(new_container) = &mut new_container {
59					new_container.push(value);
60				}
61				*self = new_container;
62			}
63			other => {
64				panic!(
65					"called `push::<u8>()` on incompatible EngineColumnData::{:?}",
66					other.get_type()
67				);
68			}
69		}
70	}
71}