/* This Source Code Form is subject to the terms of the Mozilla Public * License, v. 2.0. If a copy of the MPL was not distributed with this * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ //! Functions, types and expressions to handle FFI operations. //! //! This module leverages the various traits defined in `uniffi_core::ffi_converter_traits` to provide functionality to the rest of `uniffi_macros`. //! Keeping this layer separate makes it easier to handle changes to those traits. //! See `uniffi_core::ffi_converter_traits` for the meaning of these functions. use proc_macro2::TokenStream; use quote::{quote, ToTokens}; // Lower function pub fn lower(ty: impl ToTokens) -> TokenStream { quote! { <#ty as ::uniffi::Lower>::lower } } // Lift type pub fn lift_type(ty: impl ToTokens) -> TokenStream { quote! { <#ty as ::uniffi::Lift>::FfiType } } // Lift function pub fn try_lift(ty: impl ToTokens) -> TokenStream { quote! { <#ty as ::uniffi::Lift>::try_lift } } /// Write function pub fn write(ty: impl ToTokens) -> TokenStream { quote! { <#ty as ::uniffi::Lower>::write } } /// Read function pub fn try_read(ty: impl ToTokens) -> TokenStream { quote! { <#ty as ::uniffi::Lift>::try_read } } /// Lower return type pub fn lower_return_type(ty: impl ToTokens) -> TokenStream { quote! { <#ty as ::uniffi::LowerReturn>::ReturnType } } /// Lower return function pub fn lower_return(ty: impl ToTokens) -> TokenStream { quote! { <#ty as ::uniffi::LowerReturn>::lower_return } } /// Lower error function pub fn lower_error(ty: impl ToTokens) -> TokenStream { quote! { <#ty as ::uniffi::LowerError>::lower_error } } /// Lift return type pub fn lift_return_type(ty: impl ToTokens) -> TokenStream { quote! { <#ty as ::uniffi::LiftReturn>::ReturnType } } /// Lift foreign return function pub fn lift_foreign_return(ty: impl ToTokens) -> TokenStream { quote! { <#ty as ::uniffi::LiftReturn>::lift_foreign_return } } /// Handle failed lift function pub fn lower_return_handle_failed_lift(ty: impl ToTokens) -> TokenStream { quote! { <#ty as ::uniffi::LowerReturn>::handle_failed_lift } } /// LiftRef type pub fn lift_ref_type(ty: impl ToTokens) -> TokenStream { quote! { <#ty as ::uniffi::LiftRef>::LiftType } } /// Lower into rust buffer function pub fn lower_into_rust_buffer(ty: impl ToTokens) -> TokenStream { quote! { <#ty as ::uniffi::Lower>::lower_into_rust_buffer } } /// Lift from rust buffer function pub fn try_lift_from_rust_buffer(ty: impl ToTokens) -> TokenStream { quote! { <#ty as ::uniffi::Lift>::try_lift_from_rust_buffer } } /// Expression for the TYPE_ID_META value for a type pub fn type_id_meta(ty: impl ToTokens) -> TokenStream { quote! { <#ty as ::uniffi::TypeId>::TYPE_ID_META } }