darling_core/options/
forwarded_field.rs1use syn::{Ident, Path};
2
3use crate::{Error, FromField, FromMeta};
4
5use super::ParseAttribute;
6
7#[derive(Debug, Clone)]
9pub struct ForwardedField {
10 pub ident: Ident,
12 pub with: Option<Path>,
15}
16
17impl FromField for ForwardedField {
18 fn from_field(field: &syn::Field) -> crate::Result<Self> {
19 let result = Self {
20 ident: field.ident.clone().ok_or_else(|| {
21 Error::custom("forwarded field must be named field").with_span(field)
22 })?,
23 with: None,
24 };
25
26 result.parse_attributes(&field.attrs)
27 }
28}
29
30impl ParseAttribute for ForwardedField {
31 fn parse_nested(&mut self, mi: &syn::Meta) -> crate::Result<()> {
32 if mi.path().is_ident("with") {
33 if self.with.is_some() {
34 return Err(Error::duplicate_field_path(mi.path()).with_span(mi));
35 }
36
37 self.with = FromMeta::from_meta(mi)?;
38 Ok(())
39 } else {
40 Err(Error::unknown_field_path_with_alts(mi.path(), &["with"]).with_span(mi))
41 }
42 }
43}