Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
16 changes: 7 additions & 9 deletions canyon_manager/src/manager/entity.rs
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
use std::convert::TryFrom;
use proc_macro2::{Ident, TokenStream};
use syn::{parse::{Parse, ParseBuffer}, ItemStruct, Visibility, Generics};
use syn::{parse::{Parse, ParseBuffer}, ItemStruct, Visibility, Generics, Attribute};
use quote::quote;
use partialdebug::placeholder::PartialDebug;

Expand All @@ -15,7 +15,8 @@ pub struct CanyonEntity {
pub user_schema_name: Option<String>,
pub vis: Visibility,
pub generics: Generics,
pub fields: Vec<EntityField>
pub fields: Vec<EntityField>,
pub attrs: Vec<Attribute>
}

unsafe impl Send for CanyonEntity {}
Expand Down Expand Up @@ -113,10 +114,6 @@ impl CanyonEntity {
impl Parse for CanyonEntity {
fn parse(input: &ParseBuffer) -> syn::Result<Self> {
let _struct = input.parse::<ItemStruct>()?;
// Retrieve the struct's visibility
let _vis = _struct.vis;
// Retrieve the generics attached to this struct
let _generics = _struct.generics;

// Retrive the struct fields
let mut parsed_fields: Vec<EntityField> = Vec::new();
Expand All @@ -130,9 +127,10 @@ impl Parse for CanyonEntity {
struct_name: _struct.ident,
user_table_name: None,
user_schema_name: None,
vis: _vis,
generics: _generics,
fields: parsed_fields
vis: _struct.vis,
generics: _struct.generics,
fields: parsed_fields,
attrs: _struct.attrs
}
)
}
Expand Down
9 changes: 6 additions & 3 deletions canyon_manager/src/manager/manager_builder.rs
Original file line number Diff line number Diff line change
@@ -1,17 +1,20 @@
use proc_macro2::{TokenStream, Ident, Span};
use quote::quote;
use syn::{Attribute, Generics, Visibility};

use super::entity::CanyonEntity;

/// Builds the TokenStream that contains the user defined struct
pub fn generate_user_struct(canyon_entity: &CanyonEntity) -> TokenStream {
let fields = &canyon_entity.get_attrs_as_token_stream();

let struct_name = &canyon_entity.struct_name;
let struct_visibility = &canyon_entity.vis;
let struct_generics = &canyon_entity.generics;
let struct_name: &Ident = &canyon_entity.struct_name;
let struct_visibility: &Visibility = &canyon_entity.vis;
let struct_generics: &Generics = &canyon_entity.generics;
let struct_attrs: &Vec<Attribute> = &canyon_entity.attrs;

quote! {
#(#struct_attrs)*
#struct_visibility struct #struct_name #struct_generics {
#(#fields),*
}
Expand Down