V
А что ты хотел сделать, для чего тебе было важно чтоб внутренний макрос выполнился раньше?
Size: a a a
V
KK
#[async_trait]И есть одна из его имплементаций, которая использует так называемый enum-dispatch. Т.е. это имплементация для enum-а, который содержит в себе "структуры", которые тоже имплементят этот трейт. И все реализации методов трейта для этого энума выглядят однообразно:
impl BucketAdapter for Adapter {
}
match self {
T1(adapter) => adapter.method(arg1, arg2).await,
T2(adapter) => adapter.method(arg1, arg2).await,
}
Я хотел декларативным макросом генерить эти методы только по одной их декларации. Но из-за этого макрос async_trait не видит эти методы, и потому не делает свою магию, подменяя async fn на обычный fn.Э
#[async_trait]И есть одна из его имплементаций, которая использует так называемый enum-dispatch. Т.е. это имплементация для enum-а, который содержит в себе "структуры", которые тоже имплементят этот трейт. И все реализации методов трейта для этого энума выглядят однообразно:
impl BucketAdapter for Adapter {
}
match self {
T1(adapter) => adapter.method(arg1, arg2).await,
T2(adapter) => adapter.method(arg1, arg2).await,
}
Я хотел декларативным макросом генерить эти методы только по одной их декларации. Но из-за этого макрос async_trait не видит эти методы, и потому не делает свою магию, подменяя async fn на обычный fn.
Э
Э
Э
await на футуру в имплементации на enum, если там всё равно возвращается Box<dyn Future>?KK
await на футуру в имплементации на enum, если там всё равно возвращается Box<dyn Future>?Э
KK
async fn get_file_content(&self, name: &str) -> Result<ByteStream, StorageError>;Развернулось в:
#[must_use]Я наверное убъюсь делать такое развёртывание самостоятельно в декларативном макросе
fn get_file_content<'life0, 'life1, 'async_trait>(
&'life0 self,
name: &'life1 str,
) -> ::core::pin::Pin<
Box<
dyn ::core::future::Future<Output = Result<ByteStream, StorageError>>
+ ::core::marker::Send
+ 'async_trait,
>,
>
where
'life0: 'async_trait,
'life1: 'async_trait,
Self: 'async_trait;
KK
𝛈µ
𝛈µ
IG
MF
MF
#[actix_web::main]
async fn main() {
read::spawn, где внутри вызывается асинхронная функциIL
A<T>: B<T>. Ну и там разных методов объявил и в том, и в другом.IL
#[inline]
fn clear(&mut self) {
*self.inner_mut() = Default::default();
}
IL
JG