grafbase_sql_ast/ast/function/
json_build_object.rs

1use 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}