1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
//LICENSE Portions Copyright 2019-2021 ZomboDB, LLC.
//LICENSE
//LICENSE Portions Copyright 2021-2023 Technology Concepts & Design, Inc.
//LICENSE
//LICENSE Portions Copyright 2023-2023 PgCentral Foundation, Inc. <contact@pgcentral.org>
//LICENSE
//LICENSE All rights reserved.
//LICENSE
//LICENSE Use of this source code is governed by the MIT license that can be found in the LICENSE file.
/*!

`#[pg_cast]` related macro expansion for Rust to SQL translation

> Like all of the [`sql_entity_graph`][crate] APIs, this is considered **internal**
to the `pgrx` framework and very subject to change between versions. While you may use this, please do it with caution.

*/
use proc_macro2::TokenStream as TokenStream2;
use quote::{quote, ToTokens, TokenStreamExt};

/// A parsed `#[pg_cast]` operator.
///
/// It is created during [`PgExtern`](crate::PgExtern) parsing.
#[derive(Debug, Clone)]
pub enum PgCast {
    Default,
    Assignment,
    Implicit,
}

impl ToTokens for PgCast {
    fn to_tokens(&self, tokens: &mut TokenStream2) {
        let quoted = match self {
            PgCast::Default => quote! {
                ::pgrx::pgrx_sql_entity_graph::PgCastEntity::Default
            },
            PgCast::Assignment => quote! {
                ::pgrx::pgrx_sql_entity_graph::PgCastEntity::Assignment
            },
            PgCast::Implicit => quote! {
                ::pgrx::pgrx_sql_entity_graph::PgCastEntity::Implicit
            },
        };
        tokens.append_all(quoted);
    }
}