c2rust-refactor 0.15.0

C2Rust refactoring tool implementation
#![feature(type_ascription)]

struct S<T>(T);

impl S<(i32, S<Option<i32>>)> {
    fn f(self) {}
}

fn g() {}

fn main() {
    let s = (crate::S::<(i32, crate::S<::std::option::Option<i32>>)>: _)(
        (
            0: i32,
            (crate::S::<::std::option::Option<i32>>: _)(
                ::std::prelude::v1::None: ::std::option::Option<i32>,
            ): crate::S<::std::option::Option<i32>>,
        ): (i32, crate::S<::std::option::Option<i32>>),
    ): crate::S<(i32, crate::S<::std::option::Option<i32>>)>;
    let x = (s: crate::S<(i32, crate::S<::std::option::Option<i32>>)>).f(): ();
    let f = crate::S::<(i32, crate::S<::std::option::Option<i32>>)>::f: _;
    let s = (crate::S::<(i32, crate::S<::std::option::Option<i32>>)>: _)(
        (
            1: i32,
            (crate::S::<::std::option::Option<i32>>: _)(
                (::std::prelude::v1::Some: _)(2: i32): ::std::option::Option<i32>,
            ): crate::S<::std::option::Option<i32>>,
        ): (i32, crate::S<::std::option::Option<i32>>),
    ): crate::S<(i32, crate::S<::std::option::Option<i32>>)>;

    let mut v = (::std::vec::Vec::<i32>::new: _)(): ::std::vec::Vec<i32>;
    (v: ::std::vec::Vec<i32>).push(123: i32): ();
    let f = ::std::vec::Vec::<i32>::pop: _;
    (::std::vec::Vec::<i32>::pop: _)(&mut (v: ::std::vec::Vec<i32>): &mut ::std::vec::Vec<i32>):
        ::std::option::Option<i32>;
    (::std::vec::Vec::<i32>::drain::<::std::ops::RangeFull>: _)(
        &mut (v: ::std::vec::Vec<i32>): &mut ::std::vec::Vec<i32>,
        ::std::ops::RangeFull: ::std::ops::RangeFull,
    ): ::std::vec::Drain<i32>;

}