syn_solidity/expr/
member.rs1use crate::{utils::ParseNested, Expr, Spanned};
2use proc_macro2::Span;
3use std::fmt;
4use syn::{
5 parse::{Parse, ParseStream},
6 Result, Token,
7};
8
9#[derive(Clone)]
11pub struct ExprMember {
12 pub expr: Box<Expr>,
13 pub dot_token: Token![.],
14 pub member: Box<Expr>,
15}
16
17impl fmt::Debug for ExprMember {
18 fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
19 f.debug_struct("ExprMember")
20 .field("expr", &self.expr)
21 .field("member", &self.member)
22 .finish()
23 }
24}
25
26impl ParseNested for ExprMember {
27 fn parse_nested(expr: Box<Expr>, input: ParseStream<'_>) -> Result<Self> {
28 Ok(Self { expr, dot_token: input.parse()?, member: input.parse()? })
29 }
30}
31
32derive_parse!(ExprMember);
33
34impl Spanned for ExprMember {
35 fn span(&self) -> Span {
36 self.expr.span().join(self.member.span()).unwrap_or_else(|| {
37 self.dot_token.span.join(self.member.span()).unwrap_or_else(|| self.expr.span())
38 })
39 }
40
41 fn set_span(&mut self, span: Span) {
42 self.expr.set_span(span);
43 }
44}