diff options
| author | HampusM <hampus@hampusmat.com> | 2022-07-20 14:29:45 +0200 | 
|---|---|---|
| committer | HampusM <hampus@hampusmat.com> | 2022-07-20 14:29:45 +0200 | 
| commit | 2d1a6b2d432408d74eb57e0bda3f7434617e1070 (patch) | |
| tree | 7e21f8126edfdfd9c40b4b51ba5626c6440442d9 /syrette_macros | |
| parent | 7863d9859a5cbce99c3769e4fdb40283115d358d (diff) | |
refactor: reorganize folder hierarchy
Diffstat (limited to 'syrette_macros')
| -rw-r--r-- | syrette_macros/Cargo.toml | 19 | ||||
| -rw-r--r-- | syrette_macros/src/declare_interface_args.rs | 23 | ||||
| -rw-r--r-- | syrette_macros/src/factory_type_alias.rs | 84 | ||||
| -rw-r--r-- | syrette_macros/src/injectable_impl.rs | 245 | ||||
| -rw-r--r-- | syrette_macros/src/injectable_macro_args.rs | 17 | ||||
| -rw-r--r-- | syrette_macros/src/lib.rs | 96 | ||||
| -rw-r--r-- | syrette_macros/src/libs/intertrait_macros/LICENSE-APACHE | 176 | ||||
| -rw-r--r-- | syrette_macros/src/libs/intertrait_macros/LICENSE-MIT | 17 | ||||
| -rw-r--r-- | syrette_macros/src/libs/intertrait_macros/gen_caster.rs | 55 | ||||
| -rw-r--r-- | syrette_macros/src/libs/intertrait_macros/mod.rs | 14 | ||||
| -rw-r--r-- | syrette_macros/src/libs/mod.rs | 1 | 
11 files changed, 0 insertions, 747 deletions
diff --git a/syrette_macros/Cargo.toml b/syrette_macros/Cargo.toml deleted file mode 100644 index 74b4f91..0000000 --- a/syrette_macros/Cargo.toml +++ /dev/null @@ -1,19 +0,0 @@ -[package] -name = "syrette_macros" -version = "0.1.0" -license = "LGPL-2.1" -authors = ["HampusM <hampus@hampusmat.com>"] -description = "Macros for Syrette, the convenient dependency injection library" -repository = "https://git.hampusmat.com/syrette" -keywords = ["DI", "dependency-injection", "ioc", "inversion-of-control"] -edition = "2021" - -[lib] -proc_macro = true - -[dependencies] -syn = { version = "1.0.96", features = ["full"] } -quote = "1.0.18" -proc-macro2 = "1.0.40" -uuid = { version = "0.8", features = ["v4"] } - diff --git a/syrette_macros/src/declare_interface_args.rs b/syrette_macros/src/declare_interface_args.rs deleted file mode 100644 index b54f458..0000000 --- a/syrette_macros/src/declare_interface_args.rs +++ /dev/null @@ -1,23 +0,0 @@ -use syn::parse::{Parse, ParseStream, Result}; -use syn::{Path, Token, Type}; - -pub struct DeclareInterfaceArgs -{ -    pub implementation: Type, -    pub interface: Path, -} - -impl Parse for DeclareInterfaceArgs -{ -    fn parse(input: ParseStream) -> Result<Self> -    { -        let implementation: Type = input.parse()?; - -        input.parse::<Token![->]>()?; - -        Ok(Self { -            implementation, -            interface: input.parse()?, -        }) -    } -} diff --git a/syrette_macros/src/factory_type_alias.rs b/syrette_macros/src/factory_type_alias.rs deleted file mode 100644 index 8ea7baa..0000000 --- a/syrette_macros/src/factory_type_alias.rs +++ /dev/null @@ -1,84 +0,0 @@ -use syn::parse::{Parse, ParseStream}; -use syn::{GenericArgument, ItemType, Path, Type, TypeParamBound, TypeTuple}; - -pub struct FactoryTypeAlias -{ -    pub type_alias: ItemType, -    pub factory_interface: Path, -    pub arg_types: TypeTuple, -    pub return_type: Type, -} - -impl Parse for FactoryTypeAlias -{ -    #[allow(clippy::match_wildcard_for_single_variants)] -    fn parse(input: ParseStream) -> syn::Result<Self> -    { -        let type_alias = match input.parse::<ItemType>() { -            Ok(type_alias) => Ok(type_alias), -            Err(_) => Err(input.error("Expected a type alias")), -        }?; - -        let aliased_trait = match &type_alias.ty.as_ref() { -            Type::TraitObject(alias_type) => Ok(alias_type), -            &_ => Err(input.error("Expected the aliased type to be a trait")), -        }?; - -        if aliased_trait.bounds.len() != 1 { -            return Err(input.error("Expected the aliased trait to have a single bound.")); -        } - -        let bound_path = &match aliased_trait.bounds.first().unwrap() { -            TypeParamBound::Trait(trait_bound) => Ok(trait_bound), -            &_ => { -                Err(input.error("Expected the bound of the aliased trait to be a trait")) -            } -        }? -        .path; - -        if bound_path.segments.is_empty() -            || bound_path.segments.last().unwrap().ident != "IFactory" -        { -            return Err(input -                .error("Expected the bound of the aliased trait to be 'dyn IFactory'")); -        } - -        let angle_bracketed_args = match &bound_path.segments.last().unwrap().arguments { -            syn::PathArguments::AngleBracketed(angle_bracketed_args) => { -                Ok(angle_bracketed_args) -            } -            &_ => { -                Err(input.error("Expected angle bracketed arguments for 'dyn IFactory'")) -            } -        }?; - -        let arg_types = match &angle_bracketed_args.args[0] { -            GenericArgument::Type(arg_types_type) => match arg_types_type { -                Type::Tuple(arg_types) => Ok(arg_types), -                &_ => Err(input.error(concat!( -                    "Expected the first angle bracketed argument ", -                    "of 'dyn IFactory' to be a type tuple" -                ))), -            }, -            &_ => Err(input.error(concat!( -                "Expected the first angle bracketed argument ", -                "of 'dyn IFactory' to be a type" -            ))), -        }?; - -        let return_type = match &angle_bracketed_args.args[1] { -            GenericArgument::Type(arg_type) => Ok(arg_type), -            &_ => Err(input.error(concat!( -                "Expected the second angle bracketed argument ", -                "of 'dyn IFactory' to be a type" -            ))), -        }?; - -        Ok(Self { -            type_alias: type_alias.clone(), -            factory_interface: bound_path.clone(), -            arg_types: arg_types.clone(), -            return_type: return_type.clone(), -        }) -    } -} diff --git a/syrette_macros/src/injectable_impl.rs b/syrette_macros/src/injectable_impl.rs deleted file mode 100644 index 3000253..0000000 --- a/syrette_macros/src/injectable_impl.rs +++ /dev/null @@ -1,245 +0,0 @@ -use quote::{quote, ToTokens}; -use syn::parse::{Parse, ParseStream}; -use syn::{ -    parse_str, punctuated::Punctuated, token::Comma, ExprMethodCall, FnArg, -    GenericArgument, Ident, ImplItem, ImplItemMethod, ItemImpl, Path, PathArguments, -    Type, TypePath, -}; - -const DI_CONTAINER_VAR_NAME: &str = "di_container"; - -pub struct InjectableImpl -{ -    pub dependency_types: Vec<Type>, -    pub self_type: Type, -    pub original_impl: ItemImpl, -} - -impl Parse for InjectableImpl -{ -    fn parse(input: ParseStream) -> syn::Result<Self> -    { -        match input.parse::<ItemImpl>() { -            Ok(impl_parsed_input) => { -                match Self::_get_dependency_types(&impl_parsed_input) { -                    Ok(dependency_types) => Ok(Self { -                        dependency_types, -                        self_type: impl_parsed_input.self_ty.as_ref().clone(), -                        original_impl: impl_parsed_input, -                    }), -                    Err(error_msg) => Err(input.error(error_msg)), -                } -            } -            Err(_) => Err(input.error("Expected an impl")), -        } -    } -} - -impl InjectableImpl -{ -    pub fn expand(&self) -> proc_macro2::TokenStream -    { -        let original_impl = &self.original_impl; -        let self_type = &self.self_type; - -        let di_container_var: Ident = parse_str(DI_CONTAINER_VAR_NAME).unwrap(); - -        let get_dependencies = Self::_create_get_dependencies(&self.dependency_types); - -        quote! { -            #original_impl - -            impl syrette::interfaces::injectable::Injectable for #self_type { -                fn resolve( -                    #di_container_var: &syrette::DIContainer -                ) -> error_stack::Result< -                    syrette::ptr::InterfacePtr<Self>, -                    syrette::errors::injectable::ResolveError> -                { -                    use error_stack::ResultExt; - -                    return Ok(syrette::ptr::InterfacePtr::new(Self::new( -                        #(#get_dependencies -                            .change_context(syrette::errors::injectable::ResolveError) -                            .attach_printable( -                                format!( -                                    "Unable to resolve a dependency of {}", -                                    std::any::type_name::<#self_type>() -                                ) -                            )? -                        ),* -                    ))); -                } -            } -        } -    } - -    fn _create_get_dependencies(dependency_types: &[Type]) -> Vec<ExprMethodCall> -    { -        dependency_types -            .iter() -            .filter_map(|dep_type| match dep_type { -                Type::TraitObject(dep_type_trait) => Some( -                    parse_str( -                        format!( -                            "{}.get::<{}>()", -                            DI_CONTAINER_VAR_NAME, -                            dep_type_trait.to_token_stream() -                        ) -                        .as_str(), -                    ) -                    .unwrap(), -                ), -                Type::Path(dep_type_path) => { -                    let dep_type_path_str = Self::_path_to_string(&dep_type_path.path); - -                    let get_method_name = if dep_type_path_str.ends_with("Factory") { -                        "get_factory" -                    } else { -                        "get" -                    }; - -                    Some( -                        parse_str( -                            format!( -                                "{}.{}::<{}>()", -                                DI_CONTAINER_VAR_NAME, get_method_name, dep_type_path_str -                            ) -                            .as_str(), -                        ) -                        .unwrap(), -                    ) -                } -                &_ => None, -            }) -            .collect() -    } - -    fn _find_method_by_name<'impl_lt>( -        item_impl: &'impl_lt ItemImpl, -        method_name: &'static str, -    ) -> Option<&'impl_lt ImplItemMethod> -    { -        let impl_items = &item_impl.items; - -        impl_items -            .iter() -            .filter_map(|impl_item| match impl_item { -                ImplItem::Method(method_item) => Some(method_item), -                &_ => None, -            }) -            .find(|method_item| method_item.sig.ident == method_name) -    } - -    #[allow(clippy::match_wildcard_for_single_variants)] -    fn get_has_fn_args_self(fn_args: &Punctuated<FnArg, Comma>) -> bool -    { -        fn_args.iter().any(|arg| match arg { -            FnArg::Receiver(_) => true, -            &_ => false, -        }) -    } - -    fn _get_fn_arg_type_paths(fn_args: &Punctuated<FnArg, Comma>) -> Vec<&TypePath> -    { -        fn_args -            .iter() -            .filter_map(|arg| match arg { -                FnArg::Typed(typed_fn_arg) => match typed_fn_arg.ty.as_ref() { -                    Type::Path(arg_type_path) => Some(arg_type_path), -                    Type::Reference(ref_type_path) => match ref_type_path.elem.as_ref() { -                        Type::Path(arg_type_path) => Some(arg_type_path), -                        &_ => None, -                    }, -                    &_ => None, -                }, -                FnArg::Receiver(_receiver_fn_arg) => None, -            }) -            .collect() -    } - -    fn _path_to_string(path: &Path) -> String -    { -        path.segments -            .pairs() -            .fold(String::new(), |mut acc, segment_pair| { -                let segment_ident = &segment_pair.value().ident; - -                acc.push_str(segment_ident.to_string().as_str()); - -                let opt_colon_two = segment_pair.punct(); - -                match opt_colon_two { -                    Some(colon_two) => { -                        acc.push_str(colon_two.to_token_stream().to_string().as_str()); -                    } -                    None => {} -                } - -                acc -            }) -    } - -    fn _is_type_path_ptr(type_path: &TypePath) -> bool -    { -        let arg_type_path_string = Self::_path_to_string(&type_path.path); - -        arg_type_path_string == "InterfacePtr" -            || arg_type_path_string == "ptr::InterfacePtr" -            || arg_type_path_string == "syrrete::ptr::InterfacePtr" -            || arg_type_path_string == "FactoryPtr" -            || arg_type_path_string == "ptr::FactoryPtr" -            || arg_type_path_string == "syrrete::ptr::FactoryPtr" -    } - -    fn _get_dependency_types(item_impl: &ItemImpl) -> Result<Vec<Type>, &'static str> -    { -        let new_method_impl_item = match Self::_find_method_by_name(item_impl, "new") { -            Some(method_item) => Ok(method_item), -            None => Err("Missing a 'new' method"), -        }?; - -        let new_method_args = &new_method_impl_item.sig.inputs; - -        if Self::get_has_fn_args_self(new_method_args) { -            return Err("Unexpected self argument in 'new' method"); -        } - -        let new_method_arg_type_paths = Self::_get_fn_arg_type_paths(new_method_args); - -        if new_method_arg_type_paths -            .iter() -            .any(|arg_type_path| !Self::_is_type_path_ptr(arg_type_path)) -        { -            return Err("All argument types in 'new' method must ptr types"); -        } - -        Ok(new_method_arg_type_paths -            .iter() -            .filter_map(|arg_type_path| { -                // Assume the type path has a last segment. -                let last_path_segment = arg_type_path.path.segments.last().unwrap(); - -                match &last_path_segment.arguments { -                    PathArguments::AngleBracketed(angle_bracketed_generic_args) => { -                        let generic_args = &angle_bracketed_generic_args.args; - -                        let opt_first_generic_arg = generic_args.first(); - -                        // Assume a first generic argument exists because InterfacePtr and -                        // FactoryPtr requires one -                        let first_generic_arg = opt_first_generic_arg.as_ref().unwrap(); - -                        match first_generic_arg { -                            GenericArgument::Type(first_generic_arg_type) => { -                                Some(first_generic_arg_type.clone()) -                            } -                            &_ => None, -                        } -                    } -                    &_ => None, -                } -            }) -            .collect()) -    } -} diff --git a/syrette_macros/src/injectable_macro_args.rs b/syrette_macros/src/injectable_macro_args.rs deleted file mode 100644 index 4ef4389..0000000 --- a/syrette_macros/src/injectable_macro_args.rs +++ /dev/null @@ -1,17 +0,0 @@ -use syn::parse::{Parse, ParseStream}; -use syn::TypePath; - -pub struct InjectableMacroArgs -{ -    pub interface: TypePath, -} - -impl Parse for InjectableMacroArgs -{ -    fn parse(input: ParseStream) -> syn::Result<Self> -    { -        Ok(Self { -            interface: input.parse()?, -        }) -    } -} diff --git a/syrette_macros/src/lib.rs b/syrette_macros/src/lib.rs deleted file mode 100644 index ed1a509..0000000 --- a/syrette_macros/src/lib.rs +++ /dev/null @@ -1,96 +0,0 @@ -#![deny(clippy::all)] -#![deny(clippy::pedantic)] - -use proc_macro::TokenStream; -use quote::quote; -use syn::{parse, parse_macro_input}; - -mod declare_interface_args; -mod factory_type_alias; -mod injectable_impl; -mod injectable_macro_args; -mod libs; - -use declare_interface_args::DeclareInterfaceArgs; -use factory_type_alias::FactoryTypeAlias; -use injectable_impl::InjectableImpl; -use injectable_macro_args::InjectableMacroArgs; -use libs::intertrait_macros::gen_caster::generate_caster; - -/// Makes a struct injectable. Thereby usable with `DIContainer`. -/// -/// # Arguments -/// * A interface trait the struct implements. -/// -/// # Panics -/// If the attributed item is not a impl. -#[proc_macro_attribute] -pub fn injectable(args_stream: TokenStream, impl_stream: TokenStream) -> TokenStream -{ -    let InjectableMacroArgs { -        interface: interface_type_path, -    } = parse_macro_input!(args_stream); - -    let injectable_impl: InjectableImpl = parse(impl_stream).unwrap(); - -    let expanded_injectable_impl = injectable_impl.expand(); - -    let self_type = &injectable_impl.self_type; - -    quote! { -        #expanded_injectable_impl - -        syrette::declare_interface!(#self_type -> #interface_type_path); -    } -    .into() -} - -/// Makes a type alias usable as a factory interface. -/// -/// # Panics -/// If the attributed item is not a type alias. -#[proc_macro_attribute] -pub fn factory(_: TokenStream, type_alias_stream: TokenStream) -> TokenStream -{ -    let FactoryTypeAlias { -        type_alias, -        factory_interface, -        arg_types, -        return_type, -    } = parse(type_alias_stream).unwrap(); - -    quote! { -        #type_alias - -        syrette::declare_interface!( -            syrette::castable_factory::CastableFactory< -                #arg_types, -                #return_type -            > -> #factory_interface -        ); - -        syrette::declare_interface!( -            syrette::castable_factory::CastableFactory< -                #arg_types, -                #return_type -            > -> syrette::castable_factory::AnyFactory -        ); -    } -    .into() -} - -/// Declares the interface trait of a implementation. -/// -/// # Arguments -/// {Implementation} -> {Interface} -/// -#[proc_macro] -pub fn declare_interface(input: TokenStream) -> TokenStream -{ -    let DeclareInterfaceArgs { -        implementation, -        interface, -    } = parse_macro_input!(input); - -    generate_caster(&implementation, &interface).into() -} diff --git a/syrette_macros/src/libs/intertrait_macros/LICENSE-APACHE b/syrette_macros/src/libs/intertrait_macros/LICENSE-APACHE deleted file mode 100644 index d9a10c0..0000000 --- a/syrette_macros/src/libs/intertrait_macros/LICENSE-APACHE +++ /dev/null @@ -1,176 +0,0 @@ -                                 Apache License -                           Version 2.0, January 2004 -                        http://www.apache.org/licenses/ - -   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - -   1. Definitions. - -      "License" shall mean the terms and conditions for use, reproduction, -      and distribution as defined by Sections 1 through 9 of this document. - -      "Licensor" shall mean the copyright owner or entity authorized by -      the copyright owner that is granting the License. - -      "Legal Entity" shall mean the union of the acting entity and all -      other entities that control, are controlled by, or are under common -      control with that entity. For the purposes of this definition, -      "control" means (i) the power, direct or indirect, to cause the -      direction or management of such entity, whether by contract or -      otherwise, or (ii) ownership of fifty percent (50%) or more of the -      outstanding shares, or (iii) beneficial ownership of such entity. - -      "You" (or "Your") shall mean an individual or Legal Entity -      exercising permissions granted by this License. - -      "Source" form shall mean the preferred form for making modifications, -      including but not limited to software source code, documentation -      source, and configuration files. - -      "Object" form shall mean any form resulting from mechanical -      transformation or translation of a Source form, including but -      not limited to compiled object code, generated documentation, -      and conversions to other media types. - -      "Work" shall mean the work of authorship, whether in Source or -      Object form, made available under the License, as indicated by a -      copyright notice that is included in or attached to the work -      (an example is provided in the Appendix below). - -      "Derivative Works" shall mean any work, whether in Source or Object -      form, that is based on (or derived from) the Work and for which the -      editorial revisions, annotations, elaborations, or other modifications -      represent, as a whole, an original work of authorship. For the purposes -      of this License, Derivative Works shall not include works that remain -      separable from, or merely link (or bind by name) to the interfaces of, -      the Work and Derivative Works thereof. - -      "Contribution" shall mean any work of authorship, including -      the original version of the Work and any modifications or additions -      to that Work or Derivative Works thereof, that is intentionally -      submitted to Licensor for inclusion in the Work by the copyright owner -      or by an individual or Legal Entity authorized to submit on behalf of -      the copyright owner. For the purposes of this definition, "submitted" -      means any form of electronic, verbal, or written communication sent -      to the Licensor or its representatives, including but not limited to -      communication on electronic mailing lists, source code control systems, -      and issue tracking systems that are managed by, or on behalf of, the -      Licensor for the purpose of discussing and improving the Work, but -      excluding communication that is conspicuously marked or otherwise -      designated in writing by the copyright owner as "Not a Contribution." - -      "Contributor" shall mean Licensor and any individual or Legal Entity -      on behalf of whom a Contribution has been received by Licensor and -      subsequently incorporated within the Work. - -   2. Grant of Copyright License. Subject to the terms and conditions of -      this License, each Contributor hereby grants to You a perpetual, -      worldwide, non-exclusive, no-charge, royalty-free, irrevocable -      copyright license to reproduce, prepare Derivative Works of, -      publicly display, publicly perform, sublicense, and distribute the -      Work and such Derivative Works in Source or Object form. - -   3. Grant of Patent License. Subject to the terms and conditions of -      this License, each Contributor hereby grants to You a perpetual, -      worldwide, non-exclusive, no-charge, royalty-free, irrevocable -      (except as stated in this section) patent license to make, have made, -      use, offer to sell, sell, import, and otherwise transfer the Work, -      where such license applies only to those patent claims licensable -      by such Contributor that are necessarily infringed by their -      Contribution(s) alone or by combination of their Contribution(s) -      with the Work to which such Contribution(s) was submitted. If You -      institute patent litigation against any entity (including a -      cross-claim or counterclaim in a lawsuit) alleging that the Work -      or a Contribution incorporated within the Work constitutes direct -      or contributory patent infringement, then any patent licenses -      granted to You under this License for that Work shall terminate -      as of the date such litigation is filed. - -   4. Redistribution. You may reproduce and distribute copies of the -      Work or Derivative Works thereof in any medium, with or without -      modifications, and in Source or Object form, provided that You -      meet the following conditions: - -      (a) You must give any other recipients of the Work or -          Derivative Works a copy of this License; and - -      (b) You must cause any modified files to carry prominent notices -          stating that You changed the files; and - -      (c) You must retain, in the Source form of any Derivative Works -          that You distribute, all copyright, patent, trademark, and -          attribution notices from the Source form of the Work, -          excluding those notices that do not pertain to any part of -          the Derivative Works; and - -      (d) If the Work includes a "NOTICE" text file as part of its -          distribution, then any Derivative Works that You distribute must -          include a readable copy of the attribution notices contained -          within such NOTICE file, excluding those notices that do not -          pertain to any part of the Derivative Works, in at least one -          of the following places: within a NOTICE text file distributed -          as part of the Derivative Works; within the Source form or -          documentation, if provided along with the Derivative Works; or, -          within a display generated by the Derivative Works, if and -          wherever such third-party notices normally appear. The contents -          of the NOTICE file are for informational purposes only and -          do not modify the License. You may add Your own attribution -          notices within Derivative Works that You distribute, alongside -          or as an addendum to the NOTICE text from the Work, provided -          that such additional attribution notices cannot be construed -          as modifying the License. - -      You may add Your own copyright statement to Your modifications and -      may provide additional or different license terms and conditions -      for use, reproduction, or distribution of Your modifications, or -      for any such Derivative Works as a whole, provided Your use, -      reproduction, and distribution of the Work otherwise complies with -      the conditions stated in this License. - -   5. Submission of Contributions. Unless You explicitly state otherwise, -      any Contribution intentionally submitted for inclusion in the Work -      by You to the Licensor shall be under the terms and conditions of -      this License, without any additional terms or conditions. -      Notwithstanding the above, nothing herein shall supersede or modify -      the terms of any separate license agreement you may have executed -      with Licensor regarding such Contributions. - -   6. Trademarks. This License does not grant permission to use the trade -      names, trademarks, service marks, or product names of the Licensor, -      except as required for reasonable and customary use in describing the -      origin of the Work and reproducing the content of the NOTICE file. - -   7. Disclaimer of Warranty. Unless required by applicable law or -      agreed to in writing, Licensor provides the Work (and each -      Contributor provides its Contributions) on an "AS IS" BASIS, -      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or -      implied, including, without limitation, any warranties or conditions -      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A -      PARTICULAR PURPOSE. You are solely responsible for determining the -      appropriateness of using or redistributing the Work and assume any -      risks associated with Your exercise of permissions under this License. - -   8. Limitation of Liability. In no event and under no legal theory, -      whether in tort (including negligence), contract, or otherwise, -      unless required by applicable law (such as deliberate and grossly -      negligent acts) or agreed to in writing, shall any Contributor be -      liable to You for damages, including any direct, indirect, special, -      incidental, or consequential damages of any character arising as a -      result of this License or out of the use or inability to use the -      Work (including but not limited to damages for loss of goodwill, -      work stoppage, computer failure or malfunction, or any and all -      other commercial damages or losses), even if such Contributor -      has been advised of the possibility of such damages. - -   9. Accepting Warranty or Additional Liability. While redistributing -      the Work or Derivative Works thereof, You may choose to offer, -      and charge a fee for, acceptance of support, warranty, indemnity, -      or other liability obligations and/or rights consistent with this -      License. However, in accepting such obligations, You may act only -      on Your own behalf and on Your sole responsibility, not on behalf -      of any other Contributor, and only if You agree to indemnify, -      defend, and hold each Contributor harmless for any liability -      incurred by, or claims asserted against, such Contributor by reason -      of your accepting any such warranty or additional liability. - -   END OF TERMS AND CONDITIONS diff --git a/syrette_macros/src/libs/intertrait_macros/LICENSE-MIT b/syrette_macros/src/libs/intertrait_macros/LICENSE-MIT deleted file mode 100644 index 969d061..0000000 --- a/syrette_macros/src/libs/intertrait_macros/LICENSE-MIT +++ /dev/null @@ -1,17 +0,0 @@ -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. diff --git a/syrette_macros/src/libs/intertrait_macros/gen_caster.rs b/syrette_macros/src/libs/intertrait_macros/gen_caster.rs deleted file mode 100644 index 9126200..0000000 --- a/syrette_macros/src/libs/intertrait_macros/gen_caster.rs +++ /dev/null @@ -1,55 +0,0 @@ -/** - * Originally from Intertrait by CodeChain - * - * <https://github.com/CodeChain-io/intertrait> - * <https://crates.io/crates/intertrait/0.2.2> - * - * Licensed under either of - * - * Apache License, Version 2.0 (LICENSE-APACHE or <http://www.apache.org/licenses/LICENSE-2.0>) - * MIT license (LICENSE-MIT or <http://opensource.org/licenses/MIT>) - - * at your option. -*/ -use std::str::from_utf8_unchecked; - -use proc_macro2::TokenStream; -use quote::format_ident; -use quote::quote; -use quote::ToTokens; -use uuid::adapter::Simple; -use uuid::Uuid; - -pub fn generate_caster(ty: &impl ToTokens, trait_: &impl ToTokens) -> TokenStream -{ -    let mut fn_buf = [0u8; FN_BUF_LEN]; - -    let fn_ident = format_ident!("{}", new_fn_name(&mut fn_buf)); - -    let new_caster = quote! { -        syrette::libs::intertrait::Caster::<dyn #trait_>::new( -            |from| from.downcast::<#ty>().unwrap(), -            |from| from.downcast::<#ty>().unwrap(), -        ) -    }; - -    quote! { -        #[syrette::libs::linkme::distributed_slice(syrette::libs::intertrait::CASTERS)] -        #[linkme(crate = syrette::libs::linkme)] -        fn #fn_ident() -> (::std::any::TypeId, syrette::libs::intertrait::BoxedCaster) { -            (::std::any::TypeId::of::<#ty>(), Box::new(#new_caster)) -        } -    } -} - -const FN_PREFIX: &[u8] = b"__"; -const FN_BUF_LEN: usize = FN_PREFIX.len() + Simple::LENGTH; - -fn new_fn_name(buf: &mut [u8]) -> &str -{ -    buf[..FN_PREFIX.len()].copy_from_slice(FN_PREFIX); -    Uuid::new_v4() -        .to_simple() -        .encode_lower(&mut buf[FN_PREFIX.len()..]); -    unsafe { from_utf8_unchecked(&buf[..FN_BUF_LEN]) } -} diff --git a/syrette_macros/src/libs/intertrait_macros/mod.rs b/syrette_macros/src/libs/intertrait_macros/mod.rs deleted file mode 100644 index fa8c021..0000000 --- a/syrette_macros/src/libs/intertrait_macros/mod.rs +++ /dev/null @@ -1,14 +0,0 @@ -/** - * Originally from Intertrait by CodeChain - * - * <https://github.com/CodeChain-io/intertrait> - * <https://crates.io/crates/intertrait/0.2.2> - * - * Licensed under either of - * - * Apache License, Version 2.0 (LICENSE-APACHE or <http://www.apache.org/licenses/LICENSE-2.0>) - * MIT license (LICENSE-MIT or <http://opensource.org/licenses/MIT>) - - * at your option. -*/ -pub mod gen_caster; diff --git a/syrette_macros/src/libs/mod.rs b/syrette_macros/src/libs/mod.rs deleted file mode 100644 index e4964de..0000000 --- a/syrette_macros/src/libs/mod.rs +++ /dev/null @@ -1 +0,0 @@ -pub mod intertrait_macros;  | 
