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
use crate::source::token_rewriter::TokenRewriter;

/// Trait with common MaybeTokenRewriter APIs
pub trait MaybeTokenRewriterAPI {
    /// Constructs `Some` variant
    fn new_some(token_rewriter: TokenRewriter) -> Self
    where
        Self: Sized;

    /// Constructs `None` variant
    fn new_none() -> Self
    where
        Self: Sized;

    /// Returns true if `self` is `Some`
    fn is_some(&self) -> bool;

    /// Returns true if `self` is `None`
    fn is_none(&self) -> bool;

    /// Casts &self to Option<&TokenRewriter>
    fn as_token_rewriter(&self) -> Option<&TokenRewriter>;

    /// Casts &mut self to Option<&mut TokenRewriter>
    fn as_token_rewriter_mut(&mut self) -> Option<&mut TokenRewriter>;

    /// Casts self to TokenRewriter. Panics if self is `None`
    fn into_token_rewriter(self) -> TokenRewriter;
}