-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathdata.rs
More file actions
55 lines (48 loc) · 1.78 KB
/
data.rs
File metadata and controls
55 lines (48 loc) · 1.78 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
use proc_macro2::TokenStream;
use syn::{Data, DeriveInput, Result};
use crate::http::{
attribute::HttpErrorDataAttribute, r#enum::HttpErrorEnum, r#struct::HttpErrorStruct,
union::HttpErrorUnion,
};
pub enum HttpErrorData<'a> {
Struct(HttpErrorStruct),
Enum(HttpErrorEnum<'a>),
Union(HttpErrorUnion),
}
impl<'a> HttpErrorData<'a> {
pub fn parse(input: &'a DeriveInput) -> Result<Self> {
Ok(match &input.data {
Data::Struct(data) => Self::Struct(HttpErrorStruct::parse(input, data)?),
Data::Enum(data) => Self::Enum(HttpErrorEnum::parse(input, data)?),
Data::Union(data) => Self::Union(HttpErrorUnion::parse(input, data)?),
})
}
pub fn attribute(&self) -> Option<&HttpErrorDataAttribute> {
match self {
HttpErrorData::Struct(r#struct) => r#struct.attribute(),
HttpErrorData::Enum(r#enum) => r#enum.attribute(),
HttpErrorData::Union(r#union) => r#union.attribute(),
}
}
pub fn status(&self) -> TokenStream {
match self {
HttpErrorData::Struct(r#struct) => r#struct.status(),
HttpErrorData::Enum(r#enum) => r#enum.status(),
HttpErrorData::Union(r#union) => r#union.status(),
}
}
pub fn responses(&self) -> TokenStream {
match self {
HttpErrorData::Struct(r#struct) => r#struct.responses(),
HttpErrorData::Enum(r#enum) => r#enum.responses(),
HttpErrorData::Union(r#union) => r#union.responses(),
}
}
pub fn hook(&self) -> TokenStream {
match self {
HttpErrorData::Struct(r#struct) => r#struct.hook(),
HttpErrorData::Enum(r#enum) => r#enum.hook(),
HttpErrorData::Union(r#union) => r#union.hook(),
}
}
}