mirror of
https://github.com/openai/codex.git
synced 2026-11-13 14:46:14 +00:00
[codex] Remove async_trait from first-party code (#27475)
## Why First-party async traits should expose their `Send` contracts explicitly without requiring `async_trait`. This completes the migration pattern established in #27303 and #27304. ## What changed - Replaced the remaining first-party `async_trait` traits with native return-position `impl Future + Send` where statically dispatched and explicit boxed `Send` futures where object safety is required. - Kept implementations behavior-preserving, outlining existing async bodies into inherent methods where that keeps the diff reviewable. - Removed all direct first-party `async-trait` dependencies and the workspace dependency declaration. - Added a cargo-deny policy that permits `async-trait` only through the remaining transitive wrapper crates. - Updated `rand` from 0.8.5 to 0.8.6 to resolve RUSTSEC-2026-0097 and keep the full cargo-deny check passing. ## Validation - `just test -p codex-exec-server`: 216 passed, 2 skipped. - `just test -p codex-model-provider`: 39 passed. - `just test -p codex-core` and `just test`: changed tests passed; remaining failures are environment-sensitive suites unrelated to this migration. - `cargo deny check` - `just fix` - `just fmt` - `cargo shear` - `just bazel-lock-check`
This commit is contained in:
1 parent
1829ed1122
commit
5a56caf18c
98 files changed
+2010
-1050
No files matched your search
@@ -3,7 +3,6 @@ use std::collections::HashMap;
|
||||
use std::num::NonZeroU64;
|
||||
use std::time::Duration;
|
||||
|
||||
use async_trait::async_trait;
|
||||
use codex_model_provider_info::ModelProviderInfo;
|
||||
use codex_model_provider_info::WireApi;
|
||||
use codex_protocol::config_types::ModelProviderAuthInfo;
|
||||
@@ -14,6 +13,7 @@ use super::ThreadConfigContext;
|
||||
use super::ThreadConfigLoadError;
|
||||
use super::ThreadConfigLoadErrorCode;
|
||||
use super::ThreadConfigLoader;
|
||||
use super::ThreadConfigLoaderFuture;
|
||||
use super::ThreadConfigSource;
|
||||
use super::UserThreadConfig;
|
||||
use proto::thread_config_loader_client::ThreadConfigLoaderClient;
|
||||
@@ -49,10 +49,7 @@ impl RemoteThreadConfigLoader {
|
||||
)
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
#[async_trait]
|
||||
impl ThreadConfigLoader for RemoteThreadConfigLoader {
|
||||
async fn load(
|
||||
&self,
|
||||
context: ThreadConfigContext,
|
||||
@@ -73,6 +70,15 @@ impl ThreadConfigLoader for RemoteThreadConfigLoader {
|
||||
}
|
||||
}
|
||||
|
||||
impl ThreadConfigLoader for RemoteThreadConfigLoader {
|
||||
fn load(
|
||||
&self,
|
||||
context: ThreadConfigContext,
|
||||
) -> ThreadConfigLoaderFuture<'_, Vec<ThreadConfigSource>> {
|
||||
Box::pin(RemoteThreadConfigLoader::load(self, context))
|
||||
}
|
||||
}
|
||||
|
||||
fn load_thread_config_request(
|
||||
context: ThreadConfigContext,
|
||||
) -> tonic::Request<proto::LoadThreadConfigRequest> {
|
||||
@@ -321,8 +327,7 @@ mod tests {
|
||||
expected_cwd: String,
|
||||
}
|
||||
|
||||
#[tonic::async_trait]
|
||||
impl thread_config_loader_server::ThreadConfigLoader for TestServer {
|
||||
impl TestServer {
|
||||
async fn load(
|
||||
&self,
|
||||
request: Request<proto::LoadThreadConfigRequest>,
|
||||
@@ -341,6 +346,26 @@ mod tests {
|
||||
}
|
||||
}
|
||||
|
||||
impl thread_config_loader_server::ThreadConfigLoader for TestServer {
|
||||
fn load<'a, 'async_trait>(
|
||||
&'a self,
|
||||
request: Request<proto::LoadThreadConfigRequest>,
|
||||
) -> std::pin::Pin<
|
||||
Box<
|
||||
dyn std::future::Future<
|
||||
Output = Result<Response<proto::LoadThreadConfigResponse>, Status>,
|
||||
> + Send
|
||||
+ 'async_trait,
|
||||
>,
|
||||
>
|
||||
where
|
||||
'a: 'async_trait,
|
||||
Self: 'async_trait,
|
||||
{
|
||||
Box::pin(TestServer::load(self, request))
|
||||
}
|
||||
}
|
||||
|
||||
#[tokio::test]
|
||||
async fn load_thread_config_calls_remote_service() {
|
||||
let cwd = workspace_dir().join("project");
|
||||
|
||||
Reference in new issue
Block a user