Skip to content

Commit ab77f56

Browse files
committed
finish adjusting the derive macro
1 parent 1be4960 commit ab77f56

File tree

1 file changed

+30
-7
lines changed

1 file changed

+30
-7
lines changed

influxdb_derive/src/writeable.rs

Lines changed: 30 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,13 @@
11
use proc_macro2::{Span, TokenStream};
2-
use quote::quote;
2+
use quote::{format_ident, quote};
33
use syn::{
44
parse::{Parse, ParseStream},
55
punctuated::Punctuated,
6-
Data, DeriveInput, Field, Fields, Ident, Meta, PredicateType, QSelf, Token, Type, TypePath,
7-
WhereClause, WherePredicate,
6+
AngleBracketedGenericArguments, Data, DeriveInput, Field, Fields, GenericArgument, Ident,
7+
Lifetime, Meta, PathArguments, PredicateType, Token, Type, TypeParamBound, WhereClause,
8+
WherePredicate,
89
};
9-
use syn_path::{path, ty};
10+
use syn_path::type_path;
1011

1112
#[derive(Debug)]
1213
struct WriteableField {
@@ -168,14 +169,36 @@ pub fn expand_writeable(input: DeriveInput) -> syn::Result<TokenStream> {
168169

169170
// Add a necessary where clause
170171
let mut where_clause = where_clause.cloned().unwrap_or(WhereClause {
171-
where_token: Token![where](Span::call_site()),
172+
where_token: Default::default(),
172173
predicates: Punctuated::new(),
173174
});
175+
let mut err_ty = type_path!(<::influxdb::Timestamp as ::core::convert::TryFrom>::Error);
176+
err_ty
177+
.path
178+
.segments
179+
.iter_mut()
180+
.nth(err_ty.qself.as_ref().unwrap().position - 1)
181+
.unwrap()
182+
.arguments = PathArguments::AngleBracketed(AngleBracketedGenericArguments {
183+
colon2_token: None,
184+
lt_token: Default::default(),
185+
args: [GenericArgument::Type(time_field_ty.clone())]
186+
.into_iter()
187+
.collect(),
188+
gt_token: Default::default(),
189+
});
174190
where_clause
175191
.predicates
176192
.push(WherePredicate::Type(PredicateType {
177193
lifetimes: None,
178-
bounded_ty: ty!(<::influxdb::Timestamp as ::core::convert::TryFrom>::Error),
194+
bounded_ty: Type::Path(err_ty),
195+
colon_token: Default::default(),
196+
bounds: [TypeParamBound::Lifetime(Lifetime {
197+
apostrophe: Span::call_site(),
198+
ident: format_ident!("static"),
199+
})]
200+
.into_iter()
201+
.collect(),
179202
}));
180203

181204
// Assemble the rest of the code
@@ -243,7 +266,7 @@ pub fn expand_writeable(input: DeriveInput) -> syn::Result<TokenStream> {
243266
impl<T> ::core::error::Error for Error<T>
244267
where
245268
Timestamp: TryFrom<T>,
246-
<Timestamp as TryFrom<T>>::Error: ::core::error::Error
269+
<Timestamp as TryFrom<T>>::Error: ::core::error::Error + 'static
247270
{
248271
fn source(&self) -> Option<&(dyn ::core::error::Error + 'static)> {
249272
match self {

0 commit comments

Comments
 (0)