1use std::collections::VecDeque;
2
3pub trait Append<T> {
4 type Common: From<T>;
5 fn append(&mut self, value: T);
6}
7
8impl<T, S: From<T>> Append<T> for Vec<S> {
9 type Common = S;
10 fn append(&mut self, value: T) {
11 self.push(value.into());
12 }
13}
14
15impl<T, S: From<T>> Append<T> for VecDeque<S> {
16 type Common = S;
17 fn append(&mut self, value: T) {
18 self.push_back(value.into());
19 }
20}
21
22#[test]
23fn foo() {
24 enum Foo {
25 Bar,
26 Baz(u64),
27 }
28
29 impl From<u64> for Foo {
30 fn from(u: u64) -> Self {
31 Foo::Baz(u)
32 }
33 }
34
35 fn f<A: Append<Foo> + Append<u64>>(a: &mut A) {
36 a.append(Foo::Bar);
37 a.append(0);
38 }
39
40 let mut v: Vec<Foo> = Vec::new();
41
42 f(&mut v);
43}