Skip to content

Commit 2d34564

Browse files
authored
Merge pull request #4254 from anna-ahmed19/add_jsonb_pretty
`jsonb_pretty` function
2 parents 97898ec + 9300854 commit 2d34564

File tree

3 files changed

+83
-0
lines changed

3 files changed

+83
-0
lines changed

diesel/src/pg/expression/functions.rs

+77
Original file line numberDiff line numberDiff line change
@@ -1756,3 +1756,80 @@ define_sql_function! {
17561756
/// ```
17571757
fn jsonb_typeof<E: JsonbOrNullableJsonb + SingleValue + MaybeNullableValue<Text>>(e: E) -> E::Out;
17581758
}
1759+
1760+
#[cfg(feature = "postgres_backend")]
1761+
define_sql_function! {
1762+
/// Converts the given json value to pretty-printed, indented text
1763+
///
1764+
/// # Example
1765+
///
1766+
/// ```rust
1767+
/// # include!("../../doctest_setup.rs");
1768+
/// #
1769+
/// # fn main() {
1770+
/// # #[cfg(feature = "serde_json")]
1771+
/// # run_test().unwrap();
1772+
/// # }
1773+
/// #
1774+
/// # #[cfg(feature = "serde_json")]
1775+
/// # fn run_test() -> QueryResult<()> {
1776+
/// # use diesel::dsl::jsonb_pretty;
1777+
/// # use serde_json::{json, Value};
1778+
/// # use diesel::sql_types::{Jsonb, Nullable};
1779+
/// # let connection = &mut establish_connection();
1780+
/// let result = diesel::select(jsonb_pretty::<Jsonb, _>(json!([{"f1":1,"f2":null},2,null,3])))
1781+
/// .get_result::<String>(connection)?;
1782+
///
1783+
/// assert_eq!(r#"[
1784+
/// {
1785+
/// "f1": 1,
1786+
/// "f2": null
1787+
/// },
1788+
/// 2,
1789+
/// null,
1790+
/// 3
1791+
/// ]"#, result);
1792+
///
1793+
/// let result = diesel::select(jsonb_pretty::<Jsonb, _>(json!({"a": 1, "b": "cd"})))
1794+
/// .get_result::<String>(connection)?;
1795+
///
1796+
/// assert_eq!(r#"{
1797+
/// "a": 1,
1798+
/// "b": "cd"
1799+
/// }"#, result);
1800+
///
1801+
/// let result = diesel::select(jsonb_pretty::<Jsonb, _>(json!("abc")))
1802+
/// .get_result::<String>(connection)?;
1803+
///
1804+
/// assert_eq!(r#""abc""#, result);
1805+
///
1806+
/// let result = diesel::select(jsonb_pretty::<Jsonb, _>(json!(22)))
1807+
/// .get_result::<String>(connection)?;
1808+
///
1809+
/// assert_eq!(r#"22"#, result);
1810+
///
1811+
/// let result = diesel::select(jsonb_pretty::<Jsonb, _>(json!(false)))
1812+
/// .get_result::<String>(connection)?;
1813+
///
1814+
/// assert_eq!(r#"false"#, result);
1815+
///
1816+
/// let result = diesel::select(jsonb_pretty::<Jsonb, _>(json!(null)))
1817+
/// .get_result::<String>(connection)?;
1818+
///
1819+
/// assert_eq!(r#"null"#, result);
1820+
///
1821+
/// let result = diesel::select(jsonb_pretty::<Jsonb, _>(json!({})))
1822+
/// .get_result::<String>(connection)?;
1823+
///
1824+
/// assert_eq!(r#"{
1825+
/// }"#, result);
1826+
///
1827+
/// let result = diesel::select(jsonb_pretty::<Nullable<Jsonb>, _>(None::<Value>))
1828+
/// .get_result::<Option<String>>(connection)?;
1829+
///
1830+
/// assert!(result.is_none());
1831+
/// # Ok(())
1832+
/// # }
1833+
/// ```
1834+
fn jsonb_pretty<E: JsonbOrNullableJsonb + SingleValue + MaybeNullableValue<Text>>(e: E) -> E::Out;
1835+
}

diesel/src/pg/expression/helper_types.rs

+5
Original file line numberDiff line numberDiff line change
@@ -496,3 +496,8 @@ pub type json_typeof<E> = super::functions::json_typeof<SqlTypeOf<E>, E>;
496496
#[allow(non_camel_case_types)]
497497
#[cfg(feature = "postgres_backend")]
498498
pub type jsonb_typeof<E> = super::functions::jsonb_typeof<SqlTypeOf<E>, E>;
499+
500+
/// Return type of [`jsonb_pretty(jsonb)`](super::functions::jsonb_pretty())
501+
#[allow(non_camel_case_types)]
502+
#[cfg(feature = "postgres_backend")]
503+
pub type jsonb_pretty<E> = super::functions::jsonb_pretty<SqlTypeOf<E>, E>;

diesel_derives/tests/auto_type.rs

+1
Original file line numberDiff line numberDiff line change
@@ -440,6 +440,7 @@ fn postgres_functions() -> _ {
440440
json_object(pg_extras::text_array),
441441
json_typeof(pg_extras::json),
442442
jsonb_typeof(pg_extras::jsonb),
443+
jsonb_pretty(pg_extras::jsonb),
443444
)
444445
}
445446

0 commit comments

Comments
 (0)