pgx_sql_entity_graph/metadata/
phantomdata_ext.rs

1/*!
2
3Zero sized type marker metadata for Rust to SQL translation
4
5> Like all of the [`sql_entity_graph`][crate::pgx_sql_entity_graph] APIs, this is considered **internal**
6to the `pgx` framework and very subject to change between versions. While you may use this, please do it with caution.
7
8*/
9use core::marker::PhantomData;
10
11use super::return_variant::ReturnsError;
12use super::{ArgumentError, FunctionMetadataTypeEntity, Returns, SqlMapping, SqlTranslatable};
13
14/**
15An extension trait for [`PhantomData`][core::marker::PhantomData] offering SQL generation related info
16
17Since we don't actually want to construct values during SQL generation, we use a [`PhantomData`][core::marker::PhantomData].
18 */
19pub trait PhantomDataExt {
20    fn type_name(&self) -> &'static str;
21    fn argument_sql(&self) -> Result<SqlMapping, ArgumentError>;
22    fn return_sql(&self) -> Result<Returns, ReturnsError>;
23    fn variadic(&self) -> bool;
24    fn optional(&self) -> bool;
25    fn entity(&self) -> FunctionMetadataTypeEntity;
26}
27
28impl<T> PhantomDataExt for PhantomData<T>
29where
30    T: SqlTranslatable,
31{
32    fn type_name(&self) -> &'static str {
33        T::type_name()
34    }
35    fn argument_sql(&self) -> Result<SqlMapping, ArgumentError> {
36        T::argument_sql()
37    }
38    fn return_sql(&self) -> Result<Returns, ReturnsError> {
39        T::return_sql()
40    }
41    fn variadic(&self) -> bool {
42        T::variadic()
43    }
44    fn optional(&self) -> bool {
45        T::optional()
46    }
47    fn entity(&self) -> FunctionMetadataTypeEntity {
48        T::entity()
49    }
50}