Проблема связана с несовпадением типов. В Rust параметр типа является частью типа структуры, поэтому параметры типа для сервера в вашей структуре должны соответствовать тем, которые вы определили в своей структуре. В вашем случае они не.
Есть 2 решения вашей проблемы.
Добавить параметр типа для второго параметра сервера в вашу структуру
pub struct App<T> {
inner: Server<AddrIncoming, T>,
}
Теперь вы сможете создавать приложения с разными типами для параметра второго типа сервера
Найдите тип второго аргумента сервера, который вы создаете
В вашем случае тип второго аргумента - ``, поэтому вы должны объявить свою структуру следующим образом:
type Service = ?; // This is really hard to find in this case.
pub struct App {
inner: Server<AddrIncoming, Service>,
}
Заключение
В вашем случае, я бы порекомендовал первый, потому что тип параметра второго типа Server
трудно найти и может очень хорошо измениться во время разработки вашей программы, поэтому гораздо проще просто иметь тип параметр в вашей структуре.
Однако иногда вы не сможете использовать определенный метод на своем сервере, если не знаете, что его параметры типа не реализуют определенные признаки, поэтому вы можете добавить эти признаки к параметру типа следующим образом:
pub struct App<T: Service> {
inner: Server<AddrIncoming, T>,
}
Рекомендуется не помещать параметры типа в саму структуру, а только в блоки impl
:
pub struct App<T> {
inner: Server<AddrIncoming, T>,
}
impl App<T: Service> {
// Here you'll be able to use the method from Server where T has to be a Service.
}
Вы также можете сделать то же самое для таких функций:
pub struct App<T> {
inner: Server<AddrIncoming, T>,
}
fn some_function(app: App<T: Service>) {
// Here you'll be able to use the method from Server where T has to be a Service
}