#[cfg(any(test, feature = "pg_test"))]
#[pgx::pg_schema]
mod tests {
#[allow(unused_imports)]
use crate as pgx_tests;
use pgx::prelude::*;
use pgx::{Json, JsonB};
#[pg_test]
fn test_json() -> Result<(), pgx::spi::Error> {
use serde::{Deserialize, Serialize};
#[derive(Serialize, Deserialize)]
struct User {
username: String,
first_name: String,
last_name: String,
}
let json = Spi::get_one::<Json>(
r#" SELECT '{"username": "blahblahblah", "first_name": "Blah", "last_name": "McBlahFace"}'::json; "#,
)?.expect("datum was null");
let user: User =
serde_json::from_value(json.0).expect("failed to parse json response from SPI");
assert_eq!(user.username, "blahblahblah");
assert_eq!(user.first_name, "Blah");
assert_eq!(user.last_name, "McBlahFace");
Ok(())
}
#[pg_test]
fn test_jsonb() -> Result<(), pgx::spi::Error> {
use serde::{Deserialize, Serialize};
#[derive(Serialize, Deserialize)]
struct User {
username: String,
first_name: String,
last_name: String,
}
let json = Spi::get_one::<JsonB>(
r#" SELECT '{"username": "blahblahblah", "first_name": "Blah", "last_name": "McBlahFace"}'::jsonb; "#,
)?.expect("datum was null");
let user: User =
serde_json::from_value(json.0).expect("failed to parse json response from SPI");
assert_eq!(user.username, "blahblahblah");
assert_eq!(user.first_name, "Blah");
assert_eq!(user.last_name, "McBlahFace");
Ok(())
}
}