|
1 | 1 | mod r#enum; |
| 2 | +mod field; |
2 | 3 | mod r#struct; |
3 | 4 | mod r#union; |
4 | 5 |
|
5 | 6 | use proc_macro2::TokenStream; |
6 | | -use quote::format_ident; |
| 7 | +use quote::ToTokens; |
7 | 8 | use syn::{Data, DeriveInput, Result}; |
8 | 9 |
|
9 | | -use crate::validate::{ |
10 | | - r#enum::validate_enum, r#struct::validate_struct_tokens, union::validate_union, |
11 | | -}; |
| 10 | +use crate::validate::{r#enum::ValidateEnum, r#struct::ValidateStruct, union::ValidateUnion}; |
12 | 11 |
|
13 | | -pub fn validate_tokens(input: DeriveInput) -> Result<TokenStream> { |
14 | | - let ident = input.ident; |
15 | | - let error_ident = format_ident!("{ident}ValidationError"); |
| 12 | +pub enum Validate { |
| 13 | + Struct(ValidateStruct), |
| 14 | + Enum(ValidateEnum), |
| 15 | + Union(ValidateUnion), |
| 16 | +} |
| 17 | + |
| 18 | +impl Validate { |
| 19 | + pub fn parse(input: DeriveInput) -> Result<Self> { |
| 20 | + Ok(match &input.data { |
| 21 | + Data::Struct(data) => Self::Struct(ValidateStruct::parse(&input, data)?), |
| 22 | + Data::Enum(data) => Self::Enum(ValidateEnum::parse(&input, data)?), |
| 23 | + Data::Union(data) => Self::Union(ValidateUnion::parse(&input, data)?), |
| 24 | + }) |
| 25 | + } |
| 26 | +} |
16 | 27 |
|
17 | | - match input.data { |
18 | | - Data::Struct(data) => validate_struct_tokens(ident, error_ident, data), |
19 | | - Data::Enum(data) => validate_enum(ident, error_ident, data), |
20 | | - Data::Union(data) => validate_union(ident, error_ident, data), |
| 28 | +impl ToTokens for Validate { |
| 29 | + fn to_tokens(&self, tokens: &mut TokenStream) { |
| 30 | + match self { |
| 31 | + Validate::Struct(r#struct) => r#struct.to_tokens(tokens), |
| 32 | + Validate::Enum(r#enum) => r#enum.to_tokens(tokens), |
| 33 | + Validate::Union(r#union) => r#union.to_tokens(tokens), |
| 34 | + } |
21 | 35 | } |
22 | 36 | } |
0 commit comments