/* * Copyright (C) 2023 The Trinitrix Project * * This file is part of the Trixy crate for Trinitrix. * * Trixy is free software: you can redistribute it and/or modify * it under the terms of the Lesser GNU General Public License as * published by the Free Software Foundation, either version 3 of * the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * and the Lesser GNU General Public License along with this program. * If not, see . */ //! Trixy contains the types used by the [trixy-macros] crate to provide ffi safe types use std::{ffi::c_char, ops::Deref}; use proc_macro2::TokenStream; use quote::quote; pub mod error; pub mod traits; // NOTE(@soispha): All types specified here *MUST* be include in the BASE_TYPES constant, otherwise // they are not usable from Trixy code <2023-12-25> #[repr(C)] pub struct String(*const c_char); /// These are the "primitive" types used in Trixy, you can use any of them to create new structures pub const BASE_TYPES: [&'static str; 2] = ["String", "u8"]; pub fn to_c_name>(rust_type: T) -> TokenStream { match &*rust_type { "String" => quote!(const char*), other => panic! {"'{}' is not a vaild type name!", other}, } }