184 lines
4.3 KiB
Rust
184 lines
4.3 KiB
Rust
// Test traits
|
|
|
|
trait Foo {
|
|
fn bar(x: i32 ) -> Baz< U> { Baz::new()
|
|
}
|
|
|
|
fn baz(a: AAAAAAAAAAAAAAAAAAAAAA,
|
|
b: BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB)
|
|
-> RetType;
|
|
|
|
fn foo(a: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA, // Another comment
|
|
b: BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB)
|
|
-> RetType ; // Some comment
|
|
|
|
fn baz(&mut self ) -> i32 ;
|
|
|
|
fn increment(& mut self, x: i32 );
|
|
|
|
fn read(&mut self, x: BufReader<R> /* Used to be MemReader */)
|
|
where R: Read;
|
|
}
|
|
|
|
pub trait WriteMessage {
|
|
fn write_message (&mut self, &FrontendMessage) -> io::Result<()>;
|
|
}
|
|
|
|
trait Runnable {
|
|
fn handler(self: & Runnable );
|
|
}
|
|
|
|
trait TraitWithExpr {
|
|
fn fn_with_expr(x: [i32; 1]);
|
|
}
|
|
|
|
trait Test {
|
|
fn read_struct<T, F>(&mut self, s_name: &str, len: usize, f: F) -> Result<T, Self::Error> where F: FnOnce(&mut Self) -> Result<T, Self::Error>;
|
|
}
|
|
|
|
trait T<> {}
|
|
|
|
trait Foo { type Bar: Baz; type Inner: Foo = Box< Foo >; }
|
|
|
|
trait ConstCheck<T>:Foo where T: Baz {
|
|
const J: i32;
|
|
}
|
|
|
|
trait Tttttttttttttttttttttttttttttttttttttttttttttttttttttttttt<T>
|
|
where T: Foo {}
|
|
|
|
trait Ttttttttttttttttttttttttttttttttttttttttttttttttttttttttttt<T> where T: Foo {}
|
|
|
|
trait FooBar<T> : Tttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttt where J: Bar { fn test(); }
|
|
|
|
trait WhereList<T, J> where T: Foo, J: Bar {}
|
|
|
|
trait X /* comment */ {}
|
|
trait Y // comment
|
|
{
|
|
}
|
|
|
|
// #2055
|
|
pub trait Foo:
|
|
// A and C
|
|
A + C
|
|
// and B
|
|
+ B
|
|
{}
|
|
|
|
// #2158
|
|
trait Foo {
|
|
type ItRev = <MergingUntypedTimeSeries<SliceSeries<SliceWindow>> as UntypedTimeSeries>::IterRev;
|
|
type IteRev = <MergingUntypedTimeSeries<SliceSeries<SliceWindow>> as UntypedTimeSeries>::IterRev;
|
|
}
|
|
|
|
// #2331
|
|
trait MyTrait<AAAAAAAAAAAAAAAAAAAA, BBBBBBBBBBBBBBBBBBBB, CCCCCCCCCCCCCCCCCCCC, DDDDDDDDDDDDDDDDDDDD> {
|
|
fn foo() {}
|
|
}
|
|
|
|
// Trait aliases
|
|
trait FooBar =
|
|
Foo
|
|
+ Bar;
|
|
trait FooBar <A, B, C>=
|
|
Foo
|
|
+ Bar;
|
|
pub trait FooBar =
|
|
Foo
|
|
+ Bar;
|
|
pub trait FooBar <A, B, C>=
|
|
Foo
|
|
+ Bar;
|
|
trait AAAAAAAAAAAAAAAAAA = BBBBBBBBBBBBBBBBBBB + CCCCCCCCCCCCCCCCCCCCCCCCCCCCC + DDDDDDDDDDDDDDDDDD;
|
|
pub trait AAAAAAAAAAAAAAAAAA = BBBBBBBBBBBBBBBBBBB + CCCCCCCCCCCCCCCCCCCCCCCCCCCCC + DDDDDDDDDDDDDDDDDD;
|
|
trait AAAAAAAAAAAAAAAAAAA = BBBBBBBBBBBBBBBBBBB + CCCCCCCCCCCCCCCCCCCCCCCCCCCCC + DDDDDDDDDDDDDDDDDD;
|
|
trait AAAAAAAAAAAAAAAAAA = BBBBBBBBBBBBBBBBBBB + CCCCCCCCCCCCCCCCCCCCCCCCCCCCC + DDDDDDDDDDDDDDDDDDD;
|
|
trait AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA<A, B, C, D, E> = FooBar;
|
|
trait AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA<A, B, C, D, E> = FooBar;
|
|
#[rustfmt::skip]
|
|
trait FooBar = Foo
|
|
+ Bar;
|
|
|
|
// #2637
|
|
auto trait Example {}
|
|
pub auto trait PubExample {}
|
|
pub unsafe auto trait PubUnsafeExample {}
|
|
|
|
// #3006
|
|
trait Foo<'a> {
|
|
type Bar< 'a >;
|
|
}
|
|
|
|
impl<'a> Foo<'a> for i32 {
|
|
type Bar< 'a > = i32;
|
|
}
|
|
|
|
// #3092
|
|
pub mod test {
|
|
pub trait ATraitWithALooongName {}
|
|
pub trait ATrait
|
|
:ATraitWithALooongName + ATraitWithALooongName + ATraitWithALooongName + ATraitWithALooongName
|
|
{
|
|
}
|
|
}
|
|
|
|
// Trait aliases with where clauses.
|
|
trait A = where for<'b> &'b Self: Send;
|
|
|
|
trait B = where for<'b> &'b Self: Send + Clone + Copy + SomeTrait + AAAAAAAA + BBBBBBB + CCCCCCCCCC;
|
|
trait B = where for<'b> &'b Self: Send + Clone + Copy + SomeTrait + AAAAAAAA + BBBBBBB + CCCCCCCCCCC;
|
|
trait B = where
|
|
for<'b> &'b Self:
|
|
Send + Clone + Copy + SomeTrait + AAAAAAAA + BBBBBBB + CCCCCCCCCCCCCCCCCCCCCCC;
|
|
trait B = where
|
|
for<'b> &'b Self:
|
|
Send + Clone + Copy + SomeTrait + AAAAAAAA + BBBBBBB + CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC;
|
|
|
|
trait B = where
|
|
for<'b> &'b Self:
|
|
Send
|
|
+ Clone
|
|
+ Copy
|
|
+ SomeTrait
|
|
+ AAAAAAAA
|
|
+ BBBBBBB
|
|
+ CCCCCCCCC
|
|
+ DDDDDDD
|
|
+ DDDDDDDD
|
|
+ DDDDDDDDD
|
|
+ EEEEEEE;
|
|
|
|
trait A<'a, 'b, 'c> = Debug<T> + Foo where for<'b> &'b Self: Send;
|
|
|
|
trait B<'a, 'b, 'c> = Debug<T> +Foo
|
|
where for<'b> &'b Self:
|
|
Send
|
|
+ Clone
|
|
+ Copy
|
|
+ SomeTrait
|
|
+ AAAAAAAA
|
|
+ BBBBBBB
|
|
+ CCCCCCCCC
|
|
+ DDDDDDD;
|
|
|
|
trait B<'a, 'b, 'c,T> = Debug<'a, T> where for<'b> &'b Self:
|
|
Send
|
|
+ Clone
|
|
+ Copy
|
|
+ SomeTrait
|
|
+ AAAAAAAA
|
|
+ BBBBBBB
|
|
+ CCCCCCCCC
|
|
+ DDDDDDD
|
|
+ DDDDDDDD
|
|
+ DDDDDDDDD
|
|
+ EEEEEEE;
|
|
|
|
trait Visible {
|
|
pub const C: i32;
|
|
pub type T;
|
|
pub fn f();
|
|
pub fn g() {}
|
|
}
|