summaryrefslogtreecommitdiffstats
path: root/third_party/rust/serde_derive/src/this.rs
blob: 941cea40c1e3f1f22d6a08ff4ce4d93fc10e5bb3 (plain)
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
use crate::internals::ast::Container;
use syn::{Path, PathArguments, Token};

pub fn this_type(cont: &Container) -> Path {
    if let Some(remote) = cont.attrs.remote() {
        let mut this = remote.clone();
        for segment in &mut this.segments {
            if let PathArguments::AngleBracketed(arguments) = &mut segment.arguments {
                arguments.colon2_token = None;
            }
        }
        this
    } else {
        Path::from(cont.ident.clone())
    }
}

pub fn this_value(cont: &Container) -> Path {
    if let Some(remote) = cont.attrs.remote() {
        let mut this = remote.clone();
        for segment in &mut this.segments {
            if let PathArguments::AngleBracketed(arguments) = &mut segment.arguments {
                if arguments.colon2_token.is_none() {
                    arguments.colon2_token = Some(Token![::](arguments.lt_token.span));
                }
            }
        }
        this
    } else {
        Path::from(cont.ident.clone())
    }
}