halo/valuer.rs
1//! SqlValuer:对齐 go-sqlbuilder 对 `database/sql/driver.Valuer` 的支持(最小子集)。
2//!
3//! 在 go 里,`driver.Valuer` 可以在插值阶段被调用,得到最终可序列化值。
4//! Rust 没有统一的标准 trait;这里提供一个 crate 内 trait,供用户/测试实现。
5
6use crate::value::SqlValue;
7
8/// Valuer 错误(对齐 go 的 `Value() (driver.Value, error)`)。
9#[derive(Debug, Clone, PartialEq, Eq, thiserror::Error)]
10#[error("sql_builder: sql valuer error: {0}")]
11pub struct ValuerError(pub String);
12
13/// 可在插值阶段动态计算实际值的 trait。
14pub trait SqlValuer: dyn_clone::DynClone + std::fmt::Debug {
15 fn value(&self) -> Result<SqlValue, ValuerError>;
16}
17
18dyn_clone::clone_trait_object!(SqlValuer);