    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

    // Type for a syntax tree node that is reserved for future use.
    //
    // For example ExprReference contains a field `raw` of type Reserved. If `&raw
    // place` syntax becomes a thing as per https://github.com/rust-lang/rfcs/pull/2582,
    // we can backward compatibly change `raw`'s type to Option<Token![raw]> without
    // the possibility of breaking any code.

    use proc_macro2::Span;
    use std::marker::PhantomData;

    #[cfg(feature = "extra-traits")]
    use std::fmt::{self, Debug};

    ast_struct! {
        pub struct Reserved {
            _private: PhantomData<Span>,
        }
    }

    impl Default for Reserved {
        fn default() -> Self {
            Reserved {
                _private: PhantomData,
            }
        }
    }

    #[cfg(feature = "clone-impls")]
    #[cfg_attr(doc_cfg, doc(cfg(feature = "clone-impls")))]
    impl Clone for Reserved {
        fn clone(&self) -> Self {
            Reserved {
                _private: self._private,
            }
        }
    }

    #[cfg(feature = "extra-traits")]
    #[cfg_attr(doc_cfg, doc(cfg(feature = "extra-traits")))]
    impl Debug for Reserved {
        fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result {
            formatter.debug_struct("Reserved").finish()
        }
    }