1use crate::priv_prelude::*;
2
3#[derive(Clone, Debug, Serialize)]
5pub enum Assignable {
6 ElementAccess(ElementAccess),
17 Deref {
22 star_token: StarToken,
23 expr: Box<Expr>,
24 },
25}
26
27#[derive(Clone, Debug, Serialize)]
28pub enum ElementAccess {
29 Var(Ident),
30 Index {
31 target: Box<ElementAccess>,
32 arg: SquareBrackets<Box<Expr>>,
33 },
34 FieldProjection {
35 target: Box<ElementAccess>,
36 dot_token: DotToken,
37 name: Ident,
38 },
39 TupleFieldProjection {
40 target: Box<ElementAccess>,
41 dot_token: DotToken,
42 field: BigUint,
43 field_span: Span,
44 },
45 Deref {
46 target: Box<ElementAccess>,
47 star_token: StarToken,
48 is_root_element: bool,
50 },
51}
52
53impl Spanned for Assignable {
54 fn span(&self) -> Span {
55 match self {
56 Assignable::ElementAccess(element_access) => element_access.span(),
57 Assignable::Deref { star_token, expr } => Span::join(star_token.span(), &expr.span()),
58 }
59 }
60}
61
62impl Spanned for ElementAccess {
63 fn span(&self) -> Span {
64 match self {
65 ElementAccess::Var(name) => name.span(),
66 ElementAccess::Index { target, arg } => Span::join(target.span(), &arg.span()),
67 ElementAccess::FieldProjection { target, name, .. } => {
68 Span::join(target.span(), &name.span())
69 }
70 ElementAccess::TupleFieldProjection {
71 target, field_span, ..
72 } => Span::join(target.span(), field_span),
73 ElementAccess::Deref {
74 target,
75 star_token,
76 is_root_element: _,
77 } => Span::join(target.span(), &star_token.span()),
78 }
79 }
80}