grafbase_sql_ast/ast/function/
json_build_object.rs1use super::{Function, FunctionType};
2use crate::ast::Expression;
3use std::borrow::Cow;
4
5#[derive(Debug, Clone, PartialEq)]
6pub struct JsonBuildObject<'a> {
7 pub(crate) values: Vec<(Cow<'a, str>, Expression<'a>)>,
8}
9
10pub fn json_build_object<'a, S, E>(values: impl IntoIterator<Item = (S, E)>) -> Function<'a>
11where
12 S: Into<Cow<'a, str>>,
13 E: Into<Expression<'a>>,
14{
15 let values = values
16 .into_iter()
17 .map(|(name, value)| (name.into(), value.into()))
18 .collect();
19
20 let function = JsonBuildObject { values };
21
22 function.into()
23}
24
25impl<'a> From<JsonBuildObject<'a>> for Function<'a> {
26 fn from(value: JsonBuildObject<'a>) -> Self {
27 Self {
28 typ_: FunctionType::JsonBuildObject(value),
29 alias: None,
30 }
31 }
32}