Skip to content

Rust 1.96.0 compilation failure: E0446 private type in public interface #66

Description

@qvsimon

Description

The crate compiles successfully with Rust 1.95.0 but fails to compile with Rust 1.96.0.

The following error is reported:

error[E0446]: private type `JobComponents<<Self as EtlJob>::Worker>` in public interface
   --> sqlx-exasol-impl-0.9.2/src/connection/etl/job/mod.rs:113:10
    |
113 |     ) -> impl Future<Output = SqlxResult<JobComponents<Self::Worker>>> + Send {
    |          ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    |          can't leak private type
...
267 | struct JobComponents<W> {
    | ----------------------- `JobComponents<<Self as EtlJob>::Worker>` declared as private

Environment

  • sqlx-exasol-impl: 0.9.2
  • Rust 1.95.0: ✅ compiles successfully
  • Rust 1.96.0: ❌ compilation fails

Notes

Rust 1.96.0 introduced stricter checks for return-position impl Trait in traits (RPITIT) when private types appear in the public interface.

It appears that JobComponents is private while being exposed through the return type of a public trait method:

impl Future<Output = SqlxResult<JobComponentsSelf::Worker>> + Send

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions