reifydb-engine 0.6.0

Query execution and processing engine for ReifyDB
Documentation
// SPDX-License-Identifier: AGPL-3.0-or-later
// Copyright (c) 2026 ReifyDB

use reifydb_core::value::column::buffer::ColumnBuffer;
use reifydb_value::{
	error::TypeError,
	fragment::Fragment,
	value::{
		uuid::parse::{parse_identity_id, parse_uuid4, parse_uuid7},
		value_type::ValueType,
	},
};

use crate::{Result, error::CastError};

pub(crate) struct UuidParser;

impl UuidParser {
	pub(crate) fn from_text(
		fragment: impl Into<Fragment>,
		target: ValueType,
		row_count: usize,
	) -> Result<ColumnBuffer> {
		let fragment = fragment.into();
		match target {
			ValueType::Uuid4 => Self::parse_uuid4(fragment, row_count),
			ValueType::Uuid7 => Self::parse_uuid7(fragment, row_count),
			ValueType::IdentityId => Self::parse_identity_id(fragment, row_count),
			_ => Err(TypeError::UnsupportedCast {
				from: ValueType::Utf8,
				to: target,
				fragment,
			}
			.into()),
		}
	}

	fn parse_uuid4(fragment: impl Into<Fragment>, row_count: usize) -> Result<ColumnBuffer> {
		let fragment = fragment.into();
		match parse_uuid4(fragment.clone()) {
			Ok(uuid) => Ok(ColumnBuffer::uuid4(vec![uuid; row_count])),
			Err(err) => Err(CastError::InvalidUuid {
				fragment,
				target: ValueType::Uuid4,
				cause: err.diagnostic(),
			}
			.into()),
		}
	}

	fn parse_uuid7(fragment: impl Into<Fragment>, row_count: usize) -> Result<ColumnBuffer> {
		let fragment = fragment.into();
		match parse_uuid7(fragment.clone()) {
			Ok(uuid) => Ok(ColumnBuffer::uuid7(vec![uuid; row_count])),
			Err(err) => Err(CastError::InvalidUuid {
				fragment,
				target: ValueType::Uuid7,
				cause: err.diagnostic(),
			}
			.into()),
		}
	}

	fn parse_identity_id(fragment: impl Into<Fragment>, row_count: usize) -> Result<ColumnBuffer> {
		let fragment = fragment.into();
		match parse_identity_id(fragment.clone()) {
			Ok(id) => Ok(ColumnBuffer::identity_id(vec![id; row_count])),
			Err(err) => Err(CastError::InvalidUuid {
				fragment,
				target: ValueType::IdentityId,
				cause: err.diagnostic(),
			}
			.into()),
		}
	}
}