133d722a9Sopenharmony_ci// Functionality that is shared between the cxxbridge macro and the cmd. 233d722a9Sopenharmony_ci 333d722a9Sopenharmony_cipub mod atom; 433d722a9Sopenharmony_cipub mod attrs; 533d722a9Sopenharmony_cipub mod cfg; 633d722a9Sopenharmony_cipub mod check; 733d722a9Sopenharmony_cipub mod derive; 833d722a9Sopenharmony_cimod discriminant; 933d722a9Sopenharmony_cimod doc; 1033d722a9Sopenharmony_cipub mod error; 1133d722a9Sopenharmony_cipub mod file; 1233d722a9Sopenharmony_cipub mod ident; 1333d722a9Sopenharmony_cimod impls; 1433d722a9Sopenharmony_cimod improper; 1533d722a9Sopenharmony_cipub mod instantiate; 1633d722a9Sopenharmony_cipub mod mangle; 1733d722a9Sopenharmony_cipub mod map; 1833d722a9Sopenharmony_cimod names; 1933d722a9Sopenharmony_cipub mod namespace; 2033d722a9Sopenharmony_cimod parse; 2133d722a9Sopenharmony_cimod pod; 2233d722a9Sopenharmony_cipub mod qualified; 2333d722a9Sopenharmony_cipub mod report; 2433d722a9Sopenharmony_cipub mod resolve; 2533d722a9Sopenharmony_cipub mod set; 2633d722a9Sopenharmony_cipub mod symbol; 2733d722a9Sopenharmony_cimod tokens; 2833d722a9Sopenharmony_cimod toposort; 2933d722a9Sopenharmony_cipub mod trivial; 3033d722a9Sopenharmony_cipub mod types; 3133d722a9Sopenharmony_cimod visit; 3233d722a9Sopenharmony_ci 3333d722a9Sopenharmony_ciuse self::attrs::OtherAttrs; 3433d722a9Sopenharmony_ciuse self::cfg::CfgExpr; 3533d722a9Sopenharmony_ciuse self::namespace::Namespace; 3633d722a9Sopenharmony_ciuse self::parse::kw; 3733d722a9Sopenharmony_ciuse self::symbol::Symbol; 3833d722a9Sopenharmony_ciuse proc_macro2::{Ident, Span}; 3933d722a9Sopenharmony_ciuse syn::punctuated::Punctuated; 4033d722a9Sopenharmony_ciuse syn::token::{Brace, Bracket, Paren}; 4133d722a9Sopenharmony_ciuse syn::{Attribute, Expr, Generics, Lifetime, LitInt, Token, Type as RustType}; 4233d722a9Sopenharmony_ci 4333d722a9Sopenharmony_cipub use self::atom::Atom; 4433d722a9Sopenharmony_cipub use self::derive::{Derive, Trait}; 4533d722a9Sopenharmony_cipub use self::discriminant::Discriminant; 4633d722a9Sopenharmony_cipub use self::doc::Doc; 4733d722a9Sopenharmony_cipub use self::names::ForeignName; 4833d722a9Sopenharmony_cipub use self::parse::parse_items; 4933d722a9Sopenharmony_cipub use self::types::Types; 5033d722a9Sopenharmony_ci 5133d722a9Sopenharmony_cipub enum Api { 5233d722a9Sopenharmony_ci Include(Include), 5333d722a9Sopenharmony_ci Struct(Struct), 5433d722a9Sopenharmony_ci Enum(Enum), 5533d722a9Sopenharmony_ci CxxType(ExternType), 5633d722a9Sopenharmony_ci CxxFunction(ExternFn), 5733d722a9Sopenharmony_ci RustType(ExternType), 5833d722a9Sopenharmony_ci RustFunction(ExternFn), 5933d722a9Sopenharmony_ci TypeAlias(TypeAlias), 6033d722a9Sopenharmony_ci Impl(Impl), 6133d722a9Sopenharmony_ci} 6233d722a9Sopenharmony_ci 6333d722a9Sopenharmony_cipub struct Include { 6433d722a9Sopenharmony_ci pub cfg: CfgExpr, 6533d722a9Sopenharmony_ci pub path: String, 6633d722a9Sopenharmony_ci pub kind: IncludeKind, 6733d722a9Sopenharmony_ci pub begin_span: Span, 6833d722a9Sopenharmony_ci pub end_span: Span, 6933d722a9Sopenharmony_ci} 7033d722a9Sopenharmony_ci 7133d722a9Sopenharmony_ci/// Whether to emit `#include "path"` or `#include <path>`. 7233d722a9Sopenharmony_ci#[derive(Copy, Clone, PartialEq, Debug)] 7333d722a9Sopenharmony_cipub enum IncludeKind { 7433d722a9Sopenharmony_ci /// `#include "quoted/path/to"` 7533d722a9Sopenharmony_ci Quoted, 7633d722a9Sopenharmony_ci /// `#include <bracketed/path/to>` 7733d722a9Sopenharmony_ci Bracketed, 7833d722a9Sopenharmony_ci} 7933d722a9Sopenharmony_ci 8033d722a9Sopenharmony_cipub struct ExternType { 8133d722a9Sopenharmony_ci pub cfg: CfgExpr, 8233d722a9Sopenharmony_ci pub lang: Lang, 8333d722a9Sopenharmony_ci pub doc: Doc, 8433d722a9Sopenharmony_ci pub derives: Vec<Derive>, 8533d722a9Sopenharmony_ci pub attrs: OtherAttrs, 8633d722a9Sopenharmony_ci pub visibility: Token![pub], 8733d722a9Sopenharmony_ci pub type_token: Token![type], 8833d722a9Sopenharmony_ci pub name: Pair, 8933d722a9Sopenharmony_ci pub generics: Lifetimes, 9033d722a9Sopenharmony_ci pub colon_token: Option<Token![:]>, 9133d722a9Sopenharmony_ci pub bounds: Vec<Derive>, 9233d722a9Sopenharmony_ci pub semi_token: Token![;], 9333d722a9Sopenharmony_ci pub trusted: bool, 9433d722a9Sopenharmony_ci} 9533d722a9Sopenharmony_ci 9633d722a9Sopenharmony_cipub struct Struct { 9733d722a9Sopenharmony_ci pub cfg: CfgExpr, 9833d722a9Sopenharmony_ci pub doc: Doc, 9933d722a9Sopenharmony_ci pub derives: Vec<Derive>, 10033d722a9Sopenharmony_ci pub attrs: OtherAttrs, 10133d722a9Sopenharmony_ci pub visibility: Token![pub], 10233d722a9Sopenharmony_ci pub struct_token: Token![struct], 10333d722a9Sopenharmony_ci pub name: Pair, 10433d722a9Sopenharmony_ci pub generics: Lifetimes, 10533d722a9Sopenharmony_ci pub brace_token: Brace, 10633d722a9Sopenharmony_ci pub fields: Vec<Var>, 10733d722a9Sopenharmony_ci} 10833d722a9Sopenharmony_ci 10933d722a9Sopenharmony_cipub struct Enum { 11033d722a9Sopenharmony_ci pub cfg: CfgExpr, 11133d722a9Sopenharmony_ci pub doc: Doc, 11233d722a9Sopenharmony_ci pub derives: Vec<Derive>, 11333d722a9Sopenharmony_ci pub attrs: OtherAttrs, 11433d722a9Sopenharmony_ci pub visibility: Token![pub], 11533d722a9Sopenharmony_ci pub enum_token: Token![enum], 11633d722a9Sopenharmony_ci pub name: Pair, 11733d722a9Sopenharmony_ci pub generics: Lifetimes, 11833d722a9Sopenharmony_ci pub brace_token: Brace, 11933d722a9Sopenharmony_ci pub variants: Vec<Variant>, 12033d722a9Sopenharmony_ci pub variants_from_header: bool, 12133d722a9Sopenharmony_ci pub variants_from_header_attr: Option<Attribute>, 12233d722a9Sopenharmony_ci pub repr: EnumRepr, 12333d722a9Sopenharmony_ci pub explicit_repr: bool, 12433d722a9Sopenharmony_ci} 12533d722a9Sopenharmony_ci 12633d722a9Sopenharmony_cipub enum EnumRepr { 12733d722a9Sopenharmony_ci Native { 12833d722a9Sopenharmony_ci atom: Atom, 12933d722a9Sopenharmony_ci repr_type: Type, 13033d722a9Sopenharmony_ci }, 13133d722a9Sopenharmony_ci #[cfg(feature = "experimental-enum-variants-from-header")] 13233d722a9Sopenharmony_ci Foreign { 13333d722a9Sopenharmony_ci rust_type: syn::Path, 13433d722a9Sopenharmony_ci }, 13533d722a9Sopenharmony_ci} 13633d722a9Sopenharmony_ci 13733d722a9Sopenharmony_cipub struct ExternFn { 13833d722a9Sopenharmony_ci pub cfg: CfgExpr, 13933d722a9Sopenharmony_ci pub lang: Lang, 14033d722a9Sopenharmony_ci pub doc: Doc, 14133d722a9Sopenharmony_ci pub attrs: OtherAttrs, 14233d722a9Sopenharmony_ci pub visibility: Token![pub], 14333d722a9Sopenharmony_ci pub name: Pair, 14433d722a9Sopenharmony_ci pub sig: Signature, 14533d722a9Sopenharmony_ci pub semi_token: Token![;], 14633d722a9Sopenharmony_ci pub trusted: bool, 14733d722a9Sopenharmony_ci} 14833d722a9Sopenharmony_ci 14933d722a9Sopenharmony_cipub struct TypeAlias { 15033d722a9Sopenharmony_ci pub cfg: CfgExpr, 15133d722a9Sopenharmony_ci pub doc: Doc, 15233d722a9Sopenharmony_ci pub derives: Vec<Derive>, 15333d722a9Sopenharmony_ci pub attrs: OtherAttrs, 15433d722a9Sopenharmony_ci pub visibility: Token![pub], 15533d722a9Sopenharmony_ci pub type_token: Token![type], 15633d722a9Sopenharmony_ci pub name: Pair, 15733d722a9Sopenharmony_ci pub generics: Lifetimes, 15833d722a9Sopenharmony_ci pub eq_token: Token![=], 15933d722a9Sopenharmony_ci pub ty: RustType, 16033d722a9Sopenharmony_ci pub semi_token: Token![;], 16133d722a9Sopenharmony_ci} 16233d722a9Sopenharmony_ci 16333d722a9Sopenharmony_cipub struct Impl { 16433d722a9Sopenharmony_ci pub cfg: CfgExpr, 16533d722a9Sopenharmony_ci pub impl_token: Token![impl], 16633d722a9Sopenharmony_ci pub impl_generics: Lifetimes, 16733d722a9Sopenharmony_ci pub negative: bool, 16833d722a9Sopenharmony_ci pub ty: Type, 16933d722a9Sopenharmony_ci pub ty_generics: Lifetimes, 17033d722a9Sopenharmony_ci pub brace_token: Brace, 17133d722a9Sopenharmony_ci pub negative_token: Option<Token![!]>, 17233d722a9Sopenharmony_ci} 17333d722a9Sopenharmony_ci 17433d722a9Sopenharmony_ci#[derive(Clone, Default)] 17533d722a9Sopenharmony_cipub struct Lifetimes { 17633d722a9Sopenharmony_ci pub lt_token: Option<Token![<]>, 17733d722a9Sopenharmony_ci pub lifetimes: Punctuated<Lifetime, Token![,]>, 17833d722a9Sopenharmony_ci pub gt_token: Option<Token![>]>, 17933d722a9Sopenharmony_ci} 18033d722a9Sopenharmony_ci 18133d722a9Sopenharmony_cipub struct Signature { 18233d722a9Sopenharmony_ci pub asyncness: Option<Token![async]>, 18333d722a9Sopenharmony_ci pub unsafety: Option<Token![unsafe]>, 18433d722a9Sopenharmony_ci pub fn_token: Token![fn], 18533d722a9Sopenharmony_ci pub generics: Generics, 18633d722a9Sopenharmony_ci pub receiver: Option<Receiver>, 18733d722a9Sopenharmony_ci pub args: Punctuated<Var, Token![,]>, 18833d722a9Sopenharmony_ci pub ret: Option<Type>, 18933d722a9Sopenharmony_ci pub throws: bool, 19033d722a9Sopenharmony_ci pub paren_token: Paren, 19133d722a9Sopenharmony_ci pub throws_tokens: Option<(kw::Result, Token![<], Token![>])>, 19233d722a9Sopenharmony_ci} 19333d722a9Sopenharmony_ci 19433d722a9Sopenharmony_cipub struct Var { 19533d722a9Sopenharmony_ci pub cfg: CfgExpr, 19633d722a9Sopenharmony_ci pub doc: Doc, 19733d722a9Sopenharmony_ci pub attrs: OtherAttrs, 19833d722a9Sopenharmony_ci pub visibility: Token![pub], 19933d722a9Sopenharmony_ci pub name: Pair, 20033d722a9Sopenharmony_ci pub colon_token: Token![:], 20133d722a9Sopenharmony_ci pub ty: Type, 20233d722a9Sopenharmony_ci} 20333d722a9Sopenharmony_ci 20433d722a9Sopenharmony_cipub struct Receiver { 20533d722a9Sopenharmony_ci pub pinned: bool, 20633d722a9Sopenharmony_ci pub ampersand: Token![&], 20733d722a9Sopenharmony_ci pub lifetime: Option<Lifetime>, 20833d722a9Sopenharmony_ci pub mutable: bool, 20933d722a9Sopenharmony_ci pub var: Token![self], 21033d722a9Sopenharmony_ci pub ty: NamedType, 21133d722a9Sopenharmony_ci pub colon_token: Token![:], 21233d722a9Sopenharmony_ci pub shorthand: bool, 21333d722a9Sopenharmony_ci pub pin_tokens: Option<(kw::Pin, Token![<], Token![>])>, 21433d722a9Sopenharmony_ci pub mutability: Option<Token![mut]>, 21533d722a9Sopenharmony_ci} 21633d722a9Sopenharmony_ci 21733d722a9Sopenharmony_cipub struct Variant { 21833d722a9Sopenharmony_ci pub cfg: CfgExpr, 21933d722a9Sopenharmony_ci pub doc: Doc, 22033d722a9Sopenharmony_ci pub attrs: OtherAttrs, 22133d722a9Sopenharmony_ci pub name: Pair, 22233d722a9Sopenharmony_ci pub discriminant: Discriminant, 22333d722a9Sopenharmony_ci pub expr: Option<Expr>, 22433d722a9Sopenharmony_ci} 22533d722a9Sopenharmony_ci 22633d722a9Sopenharmony_cipub enum Type { 22733d722a9Sopenharmony_ci Ident(NamedType), 22833d722a9Sopenharmony_ci RustBox(Box<Ty1>), 22933d722a9Sopenharmony_ci RustVec(Box<Ty1>), 23033d722a9Sopenharmony_ci UniquePtr(Box<Ty1>), 23133d722a9Sopenharmony_ci SharedPtr(Box<Ty1>), 23233d722a9Sopenharmony_ci WeakPtr(Box<Ty1>), 23333d722a9Sopenharmony_ci Ref(Box<Ref>), 23433d722a9Sopenharmony_ci Ptr(Box<Ptr>), 23533d722a9Sopenharmony_ci Str(Box<Ref>), 23633d722a9Sopenharmony_ci CxxVector(Box<Ty1>), 23733d722a9Sopenharmony_ci Fn(Box<Signature>), 23833d722a9Sopenharmony_ci Void(Span), 23933d722a9Sopenharmony_ci SliceRef(Box<SliceRef>), 24033d722a9Sopenharmony_ci Array(Box<Array>), 24133d722a9Sopenharmony_ci} 24233d722a9Sopenharmony_ci 24333d722a9Sopenharmony_cipub struct Ty1 { 24433d722a9Sopenharmony_ci pub name: Ident, 24533d722a9Sopenharmony_ci pub langle: Token![<], 24633d722a9Sopenharmony_ci pub inner: Type, 24733d722a9Sopenharmony_ci pub rangle: Token![>], 24833d722a9Sopenharmony_ci} 24933d722a9Sopenharmony_ci 25033d722a9Sopenharmony_cipub struct Ref { 25133d722a9Sopenharmony_ci pub pinned: bool, 25233d722a9Sopenharmony_ci pub ampersand: Token![&], 25333d722a9Sopenharmony_ci pub lifetime: Option<Lifetime>, 25433d722a9Sopenharmony_ci pub mutable: bool, 25533d722a9Sopenharmony_ci pub inner: Type, 25633d722a9Sopenharmony_ci pub pin_tokens: Option<(kw::Pin, Token![<], Token![>])>, 25733d722a9Sopenharmony_ci pub mutability: Option<Token![mut]>, 25833d722a9Sopenharmony_ci} 25933d722a9Sopenharmony_ci 26033d722a9Sopenharmony_cipub struct Ptr { 26133d722a9Sopenharmony_ci pub star: Token![*], 26233d722a9Sopenharmony_ci pub mutable: bool, 26333d722a9Sopenharmony_ci pub inner: Type, 26433d722a9Sopenharmony_ci pub mutability: Option<Token![mut]>, 26533d722a9Sopenharmony_ci pub constness: Option<Token![const]>, 26633d722a9Sopenharmony_ci} 26733d722a9Sopenharmony_ci 26833d722a9Sopenharmony_cipub struct SliceRef { 26933d722a9Sopenharmony_ci pub ampersand: Token![&], 27033d722a9Sopenharmony_ci pub lifetime: Option<Lifetime>, 27133d722a9Sopenharmony_ci pub mutable: bool, 27233d722a9Sopenharmony_ci pub bracket: Bracket, 27333d722a9Sopenharmony_ci pub inner: Type, 27433d722a9Sopenharmony_ci pub mutability: Option<Token![mut]>, 27533d722a9Sopenharmony_ci} 27633d722a9Sopenharmony_ci 27733d722a9Sopenharmony_cipub struct Array { 27833d722a9Sopenharmony_ci pub bracket: Bracket, 27933d722a9Sopenharmony_ci pub inner: Type, 28033d722a9Sopenharmony_ci pub semi_token: Token![;], 28133d722a9Sopenharmony_ci pub len: usize, 28233d722a9Sopenharmony_ci pub len_token: LitInt, 28333d722a9Sopenharmony_ci} 28433d722a9Sopenharmony_ci 28533d722a9Sopenharmony_ci#[derive(Copy, Clone, PartialEq)] 28633d722a9Sopenharmony_cipub enum Lang { 28733d722a9Sopenharmony_ci Cxx, 28833d722a9Sopenharmony_ci Rust, 28933d722a9Sopenharmony_ci} 29033d722a9Sopenharmony_ci 29133d722a9Sopenharmony_ci// An association of a defined Rust name with a fully resolved, namespace 29233d722a9Sopenharmony_ci// qualified C++ name. 29333d722a9Sopenharmony_ci#[derive(Clone)] 29433d722a9Sopenharmony_cipub struct Pair { 29533d722a9Sopenharmony_ci pub namespace: Namespace, 29633d722a9Sopenharmony_ci pub cxx: ForeignName, 29733d722a9Sopenharmony_ci pub rust: Ident, 29833d722a9Sopenharmony_ci} 29933d722a9Sopenharmony_ci 30033d722a9Sopenharmony_ci// Wrapper for a type which needs to be resolved before it can be printed in 30133d722a9Sopenharmony_ci// C++. 30233d722a9Sopenharmony_ci#[derive(PartialEq, Eq, Hash)] 30333d722a9Sopenharmony_cipub struct NamedType { 30433d722a9Sopenharmony_ci pub rust: Ident, 30533d722a9Sopenharmony_ci pub generics: Lifetimes, 30633d722a9Sopenharmony_ci} 307