Drop ElementName trait and macros crate

This commit is contained in:
Dirkjan Ochtman 2021-12-09 12:18:38 +01:00 committed by masalachai
parent 99f90f3c08
commit 6478cff2e0
7 changed files with 1 additions and 87 deletions

View File

@ -1,6 +1,2 @@
[workspace] [workspace]
members = ['epp-client']
members = [
'epp-client-macros',
'epp-client'
]

View File

@ -1,2 +0,0 @@
/target
Cargo.lock

View File

@ -1,16 +0,0 @@
[package]
name = "epp-client-macros"
version = "0.1.0"
edition = "2018"
license = "MIT"
authors = ["Ritesh Chitlangi <ritesh@ayravat.com>"]
description = "Macros for the epp-client Library"
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
[lib]
proc-macro = true
[dependencies]
syn = { version = "1", features = ["full", "fold"] }
quote = "1"

View File

@ -1,3 +0,0 @@
# Macros for the EPP Client Library
Macros for the [epp-client](https://crates.io/crates/epp-client) rust library for Internet domain registration and management.

View File

@ -1,53 +0,0 @@
//! # Macros for the epp-client Library.
//!
//! ## Description
//!
//! `epp-client` is a client library for Internet domain registration and management for domain registrars.
//! This macro crate contains a few macros to simplify serialization of generic types used in some places
//! in the `epp-client` library
//!
extern crate proc_macro;
use proc_macro::TokenStream;
use quote::quote;
fn element_name_macro(ast: &syn::DeriveInput) -> TokenStream {
let name = &ast.ident;
let mut elem_name = ast.ident.to_string();
let (impl_generics, type_generics, _) = &ast.generics.split_for_impl();
if !ast.attrs.is_empty() {
let attribute = &ast.attrs[0];
match attribute.parse_meta() {
Ok(syn::Meta::List(meta)) => {
if !meta.nested.is_empty() {
elem_name = match &meta.nested[0] {
syn::NestedMeta::Meta(syn::Meta::NameValue(v)) => match &v.lit {
syn::Lit::Str(lit) => lit.value(),
_ => panic!("Invalid element_name attribute"),
},
_ => panic!("Invalid element_name attribute"),
};
} else {
panic!("Invalid element_name attribute");
}
}
_ => panic!("Invalid element_name attribute"),
};
}
let implement = quote! {
impl #impl_generics ElementName for #name #type_generics {
const ELEMENT: &'static str = #elem_name;
}
};
implement.into()
}
#[proc_macro_derive(ElementName, attributes(element_name))]
pub fn element_name_derive(input: TokenStream) -> TokenStream {
let ast = syn::parse(input).expect("Error while parsing ElementName macro input");
element_name_macro(&ast)
}

View File

@ -7,10 +7,7 @@ authors = ["Ritesh Chitlangi <ritesh@ayravat.com>"]
description = "EPP (Extensible Provisioning Protocol) Client Library for Domain Registration and Management" description = "EPP (Extensible Provisioning Protocol) Client Library for Domain Registration and Management"
repository = "https://github.com/masalachai/epp-client" repository = "https://github.com/masalachai/epp-client"
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
[dependencies] [dependencies]
epp-client-macros = { version = "0.1", path = "../epp-client-macros" }
celes = "2.1" celes = "2.1"
chrono = "0.4" chrono = "0.4"
quick-xml = { version = "0.22", features = [ "serialize" ] } quick-xml = { version = "0.22", features = [ "serialize" ] }

View File

@ -31,11 +31,6 @@ impl From<String> for StringValue {
} }
} }
/// Trait to set correct value for xml tags when tags are being generated from generic types
pub trait ElementName {
const ELEMENT: &'static str;
}
#[derive(Serialize, Deserialize, Debug, PartialEq)] #[derive(Serialize, Deserialize, Debug, PartialEq)]
/// An empty placeholder tag. To be refactored to something more compliant later. /// An empty placeholder tag. To be refactored to something more compliant later.
pub struct NoExtension; pub struct NoExtension;