Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add "unit struct to normal struct" case to semver.md #10871

Closed
wants to merge 4 commits into from

Conversation

obi1kenobi
Copy link
Member

What does this PR try to resolve?

Changing a public unit struct to a normal struct appears to be a breaking change that should require a major version bump: unit structs are always constructible as Foo but normal (i.e. plain) structs are only constructible as Foo {}. The curly braces are required by the compiler, and produce a compilation error and suggestion to add them if they are missing.

The semver page in the reference does not mention anything about unit structs, and as far as I could tell, this case does not seem to be covered in any of the existing entries in the Structs section of the semver page.

This PR adds a new entry in the Structs section of the semver page in the reference, describing this major breaking change and providing an example.

Changing a public unit struct to a normal struct is a breaking change that should require a major version bump. Adding an entry to the semver page in the reference to document this.
@rust-highfive
Copy link

Thanks for the pull request, and welcome! The Rust team is excited to review your changes, and you should hear from @ehuss (or someone else) soon.

Please see the contribution instructions for more information.

@rust-highfive rust-highfive added the S-waiting-on-review Status: Awaiting review from the assignee but also interested parties. label Jul 16, 2022
@ehuss
Copy link
Contributor

ehuss commented Jul 25, 2022

I think I would prefer to add a more general rule. I'm pretty sure it is not allowed to change a struct from any of the forms (unit, tuple, or brace). They each have subtle differences. I'm also fairly sure you can't change between other ADTs (union, enum).

https://internals.rust-lang.org/t/pre-rfc-stable-rustdoc-urls/13099 contains a long discussion about the possibility of semver compatibility between types. It's been a long while since I've read it, so I don't remember all the details there, but it would be good to review. However, my instinct is that there is no compatibility between changes (although the context of rustdoc URLs may be a little different from Cargo's SemVer guidelines).

I've also been contemplating changing the approach here to only list what is explicitly allowed (at least in terms of signatures), and then all other changes are assumed to be not allowed. I suspect the list of what is not allowed is going to be much longer than what is allowed. I haven't really thought this through much, but it is something that seems like a possibly better direction. Otherwise we'll just keep adding an endless list of rules of what you can't do.

Also, I'm not sure if you've seen it, but I've been keeping a list of changes that haven't been added in #8736. A problem with managing these rules is that they can be very subtle and can require a lot of thought and consideration. I would like to address as many rules as possible, but most of those rules are tricky.

@obi1kenobi
Copy link
Member Author

I think I would prefer to add a more general rule. I'm pretty sure it is not allowed to change a struct from any of the forms (unit, tuple, or brace). They each have subtle differences. I'm also fairly sure you can't change between other ADTs (union, enum).

Currently, I believe it does not appear that changing a unit struct to a tuple struct must be a breaking change:
https://play.rust-lang.org/?version=stable&mode=debug&edition=2021&gist=c0abcedf80c44a258bd0ed6e11838e64

Of course, we could decide that, despite the conversion being technically allowed by the compiler, a unit -> tuple struct change requires a major version bump regardless. I just wanted to raise this edge case for your consideration.

If the struct has no private fields, any other struct form change is clearly breaking because of differing struct literals rules. However, if the struct is #[non_exhaustive] or has private fields, then struct literals cannot be used and it wasn't clear to me that this would necessarily be a breaking change. A similar argument can be made for enum variants that are #[non_exhaustive] or have private fields. That's why I added this more limited version of the rule. I've never used Rust unions so I haven't thought about them.

https://internals.rust-lang.org/t/pre-rfc-stable-rustdoc-urls/13099 contains a long discussion about the possibility of semver compatibility between types. It's been a long while since I've read it, so I don't remember all the details there, but it would be good to review. However, my instinct is that there is no compatibility between changes (although the context of rustdoc URLs may be a little different from Cargo's SemVer guidelines).

Great link — thanks! It's a bit of a long read and I'm about to go on a trip, so I'll need a bit of time to digest it.

I've also been contemplating changing the approach here to only list what is explicitly allowed (at least in terms of signatures), and then all other changes are assumed to be not allowed. I suspect the list of what is not allowed is going to be much longer than what is allowed. I haven't really thought this through much, but it is something that seems like a possibly better direction. Otherwise we'll just keep adding an endless list of rules of what you can't do.

I understand the hesitation around the very long list of rules. That said, I think having the "explicitly not allowed" approach is overall better for several reasons:

  • It's helpful for educational purposes to be able to point users to a docs entry + example that covers why their change is breaking.
  • When semver-checkers like my own cargo-semver-checks find a problem, they can link to a specific entry on the reference page and rely on it to explain the problem in more detail rather than having to write ad-hoc explanations of their own.
  • In a "list of disallowed things," it's easy to spot a missing rule: just provide an example of a breaking change that isn't covered in the current list of rules. If the list contained only allowed changes, it's much more difficult to argue that an additional kind of change should be allowed. For example, if I had thought something additional should be allowed, I would have assumed that I'm missing something and "there must be a good reason that I'm not seeing," so I never would have opened PRs like this one.

It's also much easier to create a good end-user experience when building semver-checkers (again, like my own cargo-semver-checks) if such tools can look for individual violations of very simple rules (e.g. "don't rename pub structs") rather than checking for an allow-list of rules that is shorter but where the rules are more complex.

The allow-list approach requires much more "understanding" of what the user's change is in order to generate good error messages, and comes with a bigger UX risk: "Is this really a breaking change or did the checker misunderstand my change?"

With simple deny-list rules, it's easier to look at the query that captures the rule and verify that it faithfully encodes the rule because of the relative simplicity. Any violations that query finds can also be easily explained to the user. Since the tool might not cover all rules (since there are many and adding them all to the tool will take time), this approach will make it easier to explain to users which rules are checked by the tool and which are not: one can just show a table of all the semver rules in the reference and show checkmarks next to the ones checked by the tool.

As @oli-obk said on Twitter the other day, we should strongly consider writing the rules in a form amenable to being checked automatically since they are complex and difficult to check by hand. I hope I've convinced you that the deny-list approach is better for checking automatically than the allow-list approach.

I understand that the deny-list approach means more work to write and maintain the semver reference docs. As I'm advocating for that approach, I'm also happy to share in that burden by writing and reviewing new additions to the semver reference docs.

Also, I'm not sure if you've seen it, but I've been keeping a list of changes that haven't been added in #8736. A problem with managing these rules is that they can be very subtle and can require a lot of thought and consideration. I would like to address as many rules as possible, but most of those rules are tricky.

That's a fantastic list! I hadn't seen it, thanks for sharing — it will be very useful to me.

@ehuss
Copy link
Contributor

ehuss commented Jul 25, 2022

Currently, I believe it does not appear that changing a unit struct to a tuple struct must be a breaking change:
https://play.rust-lang.org/?version=stable&mode=debug&edition=2021&gist=c0abcedf80c44a258bd0ed6e11838e64

This isn't quite right.

    // but both of these ways to create a Bar work fine
    let _a = Bar;
    let _b = Bar();

_a doesn't construct Bar. It assigns to _a a function that constructs Bar (a tuple constructor).

The subtleties are also around which entities exist in various namespaces. All structs place an entity in the type namespace. Tuple structs also place a constructor function in the value namespace. A unit-struct places a const in the value namespace (equivalent to const Foo: Foo = Foo {}; in your example).


Thanks for the comments on the negative rules. That does sound like it'll be useful. Hopefully we can wrangle the rules so that they don't become too endless.

@obi1kenobi
Copy link
Member Author

Ah, my bad — thanks.

Do you know if #[non_exhaustive] structs place entries in the value namespace as well? It seems to me like the tuple struct's constructor, and the unit struct's const are either not present or are inaccessible if those structs are #[non_exhaustive], so I'm not sure whether changing from one non-exhaustive kind of struct to another non-exhaustive kind would be breaking something there.

@ehuss
Copy link
Contributor

ehuss commented Jul 25, 2022

I believe the tuple constructor becomes private (it removes the pub) when accessed from a remote crate.

EDIT: (I have an issue open to clarify that.)

@obi1kenobi
Copy link
Member Author

I believe the tuple constructor becomes private (it removes the pub) when accessed from a remote crate.

EDIT: (I have an issue open to clarify that.)

Once again, great link — thanks :)

Removing the pub makes sense. In that case, it seems to me like #[non_exhaustive] structs changing type might be okay from a semver perspective?

Here's my reasoning:

  • the constructor / const aren't visible outside the crate,
  • struct literals cannot be used from outside the crate because of #[non_exhaustive], and
  • ignoring Debug printing different output for plain vs tuple vs unit structs ({ ... } vs ( ... ) vs none), I don't believe there are any other externally-observable differences between struct kinds.

What do you think? Happy to amend the PR with what you think the rule should be.

@obi1kenobi obi1kenobi marked this pull request as draft July 25, 2022 15:11
@ehuss
Copy link
Contributor

ehuss commented Aug 16, 2022

Removing the pub makes sense. In that case, it seems to me like #[non_exhaustive] structs changing type might be okay from a semver perspective?

I think only if they have zero public fields. I can't think of a specific case otherwise where that would be a problem.

So, in summary, I think the only safe conversion (aside from struct-tuple-normal-with-private) is: Converting between unit, tuple, and fields struct kinds with #[non_exhaustive] with zero public fields.

If there are any public fields, then it could cause problems with pattern matching.

@ehuss ehuss added S-waiting-on-author Status: The marked PR is awaiting some action (such as code changes) from the PR author. and removed S-waiting-on-review Status: Awaiting review from the assignee but also interested parties. labels Aug 17, 2022
@bors
Copy link
Contributor

bors commented Jul 12, 2023

☔ The latest upstream changes (presumably #12339) made this pull request unmergeable. Please resolve the merge conflicts.

github-merge-queue bot pushed a commit to TheHackerApp/logging that referenced this pull request Jan 16, 2024
## 🤖 New release
* `logging`: 0.1.3 -> 0.2.0 (⚠️ API breaking changes)

### ⚠️ `logging` breaking changes

```
--- failure derive_trait_impl_removed: built-in derived trait no longer implemented ---

Description:
A public type has stopped deriving one or more traits. This can break downstream code that depends on those types implementing those traits.
        ref: https://doc.rust-lang.org/reference/attributes/derive.html#derive
       impl: https://github.com/obi1kenobi/cargo-semver-checks/tree/v0.27.0/src/lints/derive_trait_impl_removed.ron

Failed in:
  type MakeSpanWithId no longer derives Copy, in /tmp/.tmpL0GyxN/logging/src/http.rs:13

--- failure unit_struct_changed_kind: unit struct changed kind ---

Description:
A public unit struct has been changed to a normal (curly-braces) struct, which cannot be constructed using the same struct literal syntax.
        ref: rust-lang/cargo#10871
       impl: https://github.com/obi1kenobi/cargo-semver-checks/tree/v0.27.0/src/lints/unit_struct_changed_kind.ron

Failed in:
  struct MakeSpanWithId in /tmp/.tmpL0GyxN/logging/src/http.rs:13
```

<details><summary><i><b>Changelog</b></i></summary><p>


</p></details>

---
This PR was generated with
[release-plz](https://github.com/MarcoIeni/release-plz/).

Signed-off-by: the-hacker-app-releases[bot] <150499272+the-hacker-app-releases[bot]@users.noreply.github.com>
Co-authored-by: the-hacker-app-releases[bot] <150499272+the-hacker-app-releases[bot]@users.noreply.github.com>
@epage
Copy link
Contributor

epage commented Jul 18, 2024

At this has been waiting-on-author for a couple of years, I'm going to go ahead and close this. We can always pick this up again later.

@epage epage closed this Jul 18, 2024
@obi1kenobi
Copy link
Member Author

Ah, sorry — I did drop the ball on this. Closing is the right call. Thanks, Ed!

I'm not sure I have the right set of skills to write reference-quality docs, and I don't want to take up more of the cargo team's time with reviewing docs PRs and mentoring me toward getting better at it.

As I work on cargo-semver-checks, I'll look to contribute by doing and sharing some of the prep work. I can identify SemVer rules that aren't mentioned in the reference, describe the manner in which they cause breakage, and generally try to supply the prerequisite research needed for someone with better docs-writing skills to put that info into the reference.

DDtKey pushed a commit to testcontainers/testcontainers-rs-modules-community that referenced this pull request Sep 25, 2024
## 🤖 New release
* `testcontainers-modules`: 0.10.0 -> 0.11.0 (⚠️ API breaking changes)

### ⚠️ `testcontainers-modules` breaking changes

```
--- failure unit_struct_changed_kind: unit struct changed kind ---

Description:
A public unit struct has been changed to a normal (curly-braces) struct, which cannot be constructed using the same struct literal syntax.
        ref: rust-lang/cargo#10871
       impl: https://github.com/obi1kenobi/cargo-semver-checks/tree/v0.35.0/src/lints/unit_struct_changed_kind.ron

Failed in:
  struct DynamoDb in /tmp/.tmpSZARLK/testcontainers-rs-modules-community/src/dynamodb_local/mod.rs:8
  struct KwokCluster in /tmp/.tmpSZARLK/testcontainers-rs-modules-community/src/kwok/mod.rs:36
  struct CncfDistribution in /tmp/.tmpSZARLK/testcontainers-rs-modules-community/src/cncf_distribution/mod.rs:30
  struct Redis in /tmp/.tmpSZARLK/testcontainers-rs-modules-community/src/redis/standalone.rs:37
  struct RabbitMq in /tmp/.tmpSZARLK/testcontainers-rs-modules-community/src/rabbitmq/mod.rs:33
  struct ElasticMq in /tmp/.tmpSZARLK/testcontainers-rs-modules-community/src/elasticmq/mod.rs:7
  struct VictoriaMetrics in /tmp/.tmpSZARLK/testcontainers-rs-modules-community/src/victoria_metrics/mod.rs:36
  struct RedisStack in /tmp/.tmpSZARLK/testcontainers-rs-modules-community/src/redis/stack.rs:35
```

<details><summary><i><b>Changelog</b></i></summary><p>

<blockquote>

## [0.11.0] - 2024-09-25

### Bug Fixes

- Update version to fix crashes in CI
([#219](#219))
- [**breaking**] Make EULA acception explicit
([#218](#218))

### Documentation

- Add docs for the ganachecli module
([#190](#190))

### Features

- Add ability to enable properties-config for testcontainers
- [**breaking**] Update testcontainers to `0.23.0`
([#216](#216))

### Miscellaneous Tasks

- Update redis requirement from 0.26.0 to 0.27.2
([#211](#211))
- Exclude all-features test run
([#174](#174))
- Update async-nats requirement from 0.35.0 to 0.36.0
([#206](#206))

### Refactor

- [**breaking**] Require the builder pattern for module initalisation
([#161](#161))

### Testing

- Correct password usage

<!-- generated by git-cliff -->
</blockquote>


</p></details>

---
This PR was generated with
[release-plz](https://github.com/MarcoIeni/release-plz/).

Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
lwwmanning pushed a commit to spiraldb/vortex that referenced this pull request Oct 30, 2024
## 🤖 New release
* `vortex-alp`: 0.12.0 -> 0.13.0 (✓ API compatible changes)
* `vortex-array`: 0.12.0 -> 0.13.0 (⚠️ API breaking changes)
* `vortex-buffer`: 0.12.0 -> 0.13.0 (✓ API compatible changes)
* `vortex-datetime-dtype`: 0.12.0 -> 0.13.0 (✓ API compatible changes)
* `vortex-dtype`: 0.12.0 -> 0.13.0 (⚠️ API breaking changes)
* `vortex-error`: 0.12.0 -> 0.13.0 (⚠️ API breaking changes)
* `vortex-flatbuffers`: 0.12.0 -> 0.13.0 (⚠️ API breaking changes)
* `vortex-proto`: 0.12.0 -> 0.13.0
* `vortex-scalar`: 0.12.0 -> 0.13.0 (✓ API compatible changes)
* `vortex-fastlanes`: 0.12.0 -> 0.13.0 (⚠️ API breaking changes)
* `vortex-bytebool`: 0.12.0 -> 0.13.0 (✓ API compatible changes)
* `vortex-datafusion`: 0.12.0 -> 0.13.0 (✓ API compatible changes)
* `vortex-expr`: 0.12.0 -> 0.13.0 (⚠️ API breaking changes)
* `vortex-schema`: 0.12.0 -> 0.13.0
* `vortex-serde`: 0.12.0 -> 0.13.0 (✓ API compatible changes)
* `vortex-sampling-compressor`: 0.12.0 -> 0.13.0 (⚠️ API breaking
changes)
* `vortex-datetime-parts`: 0.12.0 -> 0.13.0 (✓ API compatible changes)
* `vortex-dict`: 0.12.0 -> 0.13.0 (✓ API compatible changes)
* `vortex-fsst`: 0.12.0 -> 0.13.0 (✓ API compatible changes)
* `vortex-roaring`: 0.12.0 -> 0.13.0 (⚠️ API breaking changes)
* `vortex-runend`: 0.12.0 -> 0.13.0 (⚠️ API breaking changes)
* `vortex-runend-bool`: 0.12.0 -> 0.13.0 (⚠️ API breaking changes)
* `vortex-zigzag`: 0.12.0 -> 0.13.0 (✓ API compatible changes)

### ⚠️ `vortex-array` breaking changes

```
--- failure declarative_macro_missing: macro_rules declaration removed or renamed ---

Description:
A publicly-visible `macro_rules` declarative macro cannot be imported by its prior name. A `#[macro_export]` may have been removed, or the macro itself may have been renamed or removed entirely.
        ref: https://doc.rust-lang.org/reference/macros-by-example.html#path-based-scope
       impl: https://github.com/obi1kenobi/cargo-semver-checks/tree/v0.36.0/src/lints/declarative_macro_missing.ron

Failed in:
  macro_rules! assert_arrays_eq, previously in file /tmp/.tmpnyv9D6/vortex-array/src/array/assertions.rs:2

--- failure enum_variant_added: enum variant added on exhaustive enum ---

Description:
A publicly-visible enum without #[non_exhaustive] has a new variant.
        ref: https://doc.rust-lang.org/cargo/reference/semver.html#enum-variant-new
       impl: https://github.com/obi1kenobi/cargo-semver-checks/tree/v0.36.0/src/lints/enum_variant_added.ron

Failed in:
  variant Canonical:VarBinView in /tmp/.tmpCUhGq5/vortex/vortex-array/src/canonical.rs:61

--- failure enum_variant_missing: pub enum variant removed or renamed ---

Description:
A publicly-visible enum has at least one variant that is no longer available under its prior name. It may have been renamed or removed entirely.
        ref: https://doc.rust-lang.org/cargo/reference/semver.html#item-remove
       impl: https://github.com/obi1kenobi/cargo-semver-checks/tree/v0.36.0/src/lints/enum_variant_missing.ron

Failed in:
  variant Canonical::VarBin, previously in file /tmp/.tmpnyv9D6/vortex-array/src/canonical.rs:61

--- failure inherent_method_missing: pub method removed or renamed ---

Description:
A publicly-visible method or associated fn is no longer available under its prior name. It may have been renamed or removed entirely.
        ref: https://doc.rust-lang.org/cargo/reference/semver.html#item-remove
       impl: https://github.com/obi1kenobi/cargo-semver-checks/tree/v0.36.0/src/lints/inherent_method_missing.ron

Failed in:
  Canonical::into_varbin, previously in file /tmp/.tmpnyv9D6/vortex-array/src/canonical.rs:120
  VarBinViewArray::bytes, previously in file /tmp/.tmpnyv9D6/vortex-array/src/array/varbinview/mod.rs:183
  BinaryView::size, previously in file /tmp/.tmpnyv9D6/vortex-array/src/array/varbinview/mod.rs:85

--- failure module_missing: pub module removed or renamed ---

Description:
A publicly-visible module cannot be imported by its prior path. A `pub use` may have been removed, or the module may have been renamed, removed, or made non-public.
        ref: https://doc.rust-lang.org/cargo/reference/semver.html#item-remove
       impl: https://github.com/obi1kenobi/cargo-semver-checks/tree/v0.36.0/src/lints/module_missing.ron

Failed in:
  mod vortex::opaque, previously in file /tmp/.tmpnyv9D6/vortex-array/src/opaque.rs:1
  mod vortex::visitor, previously in file /tmp/.tmpnyv9D6/vortex-array/src/visitor.rs:1
  mod vortex::vendored, previously in file /tmp/.tmpnyv9D6/vortex-array/src/vendored.rs:1

--- failure struct_missing: pub struct removed or renamed ---

Description:
A publicly-visible struct cannot be imported by its prior path. A `pub use` may have been removed, or the struct itself may have been renamed or removed entirely.
        ref: https://doc.rust-lang.org/cargo/reference/semver.html#item-remove
       impl: https://github.com/obi1kenobi/cargo-semver-checks/tree/v0.36.0/src/lints/struct_missing.ron

Failed in:
  struct vortex::opaque::OpaqueEncoding, previously in file /tmp/.tmpnyv9D6/vortex-array/src/opaque.rs:19
  struct vortex::ChildrenCollector, previously in file /tmp/.tmpnyv9D6/vortex-array/src/view.rs:170

--- failure trait_added_supertrait: non-sealed trait added new supertraits ---

Description:
A non-sealed trait added one or more supertraits, which breaks downstream implementations of the trait
        ref: https://doc.rust-lang.org/cargo/reference/semver.html#generic-bounds-tighten
       impl: https://github.com/obi1kenobi/cargo-semver-checks/tree/v0.36.0/src/lints/trait_added_supertrait.ron

Failed in:
  trait vortex::ArrayMetadata gained Display in file /tmp/.tmpCUhGq5/vortex/vortex-array/src/metadata.rs:15

--- failure trait_method_added: pub trait method added ---

Description:
A non-sealed public trait added a new method without a default implementation, which breaks downstream implementations of the trait
        ref: https://doc.rust-lang.org/cargo/reference/semver.html#trait-new-item-no-default
       impl: https://github.com/obi1kenobi/cargo-semver-checks/tree/v0.36.0/src/lints/trait_method_added.ron

Failed in:
  trait method vortex::IntoArrayVariant::into_varbinview in file /tmp/.tmpCUhGq5/vortex/vortex-array/src/canonical.rs:315

--- failure trait_method_missing: pub trait method removed or renamed ---

Description:
A trait method is no longer callable, and may have been renamed or removed entirely.
        ref: https://doc.rust-lang.org/cargo/reference/semver.html#major-any-change-to-trait-item-signatures
       impl: https://github.com/obi1kenobi/cargo-semver-checks/tree/v0.36.0/src/lints/trait_method_missing.ron

Failed in:
  method into_varbin of trait IntoArrayVariant, previously in file /tmp/.tmpnyv9D6/vortex-array/src/canonical.rs:388

--- failure trait_missing: pub trait removed or renamed ---

Description:
A publicly-visible trait cannot be imported by its prior path. A `pub use` may have been removed, or the trait itself may have been renamed or removed entirely.
        ref: https://doc.rust-lang.org/cargo/reference/semver.html#item-remove
       impl: https://github.com/obi1kenobi/cargo-semver-checks/tree/v0.36.0/src/lints/trait_missing.ron

Failed in:
  trait vortex::visitor::AcceptArrayVisitor, previously in file /tmp/.tmpnyv9D6/vortex-array/src/visitor.rs:7
  trait vortex::visitor::ArrayVisitor, previously in file /tmp/.tmpnyv9D6/vortex-array/src/visitor.rs:12

--- failure trait_removed_supertrait: supertrait removed or renamed ---

Description:
A supertrait was removed from a trait. Users of the trait can no longer assume it can also be used like its supertrait.
        ref: https://doc.rust-lang.org/reference/items/traits.html#supertraits
       impl: https://github.com/obi1kenobi/cargo-semver-checks/tree/v0.36.0/src/lints/trait_removed_supertrait.ron

Failed in:
  supertrait vortex::visitor::AcceptArrayVisitor of trait ArrayTrait in file /tmp/.tmpCUhGq5/vortex/vortex-array/src/lib.rs:271
```

### ⚠️ `vortex-dtype` breaking changes

```
--- failure function_missing: pub fn removed or renamed ---

Description:
A publicly-visible function cannot be imported by its prior path. A `pub use` may have been removed, or the function itself may have been renamed or removed entirely.
        ref: https://doc.rust-lang.org/cargo/reference/semver.html#item-remove
       impl: https://github.com/obi1kenobi/cargo-semver-checks/tree/v0.36.0/src/lints/function_missing.ron

Failed in:
  function vortex_dtype::flatbuffers::resolve_field_references, previously in file /tmp/.tmpnyv9D6/vortex-dtype/src/serde/flatbuffers/project.rs:11
```

### ⚠️ `vortex-error` breaking changes

```
--- failure enum_variant_added: enum variant added on exhaustive enum ---

Description:
A publicly-visible enum without #[non_exhaustive] has a new variant.
        ref: https://doc.rust-lang.org/cargo/reference/semver.html#enum-variant-new
       impl: https://github.com/obi1kenobi/cargo-semver-checks/tree/v0.36.0/src/lints/enum_variant_added.ron

Failed in:
  variant VortexError:UrlError in /tmp/.tmpCUhGq5/vortex/vortex-error/src/lib.rs:161
```

### ⚠️ `vortex-flatbuffers` breaking changes

```
--- failure constructible_struct_adds_field: externally-constructible struct adds field ---

Description:
A pub struct constructible with a struct literal has a new pub field. Existing struct literals must be updated to include the new field.
        ref: https://doc.rust-lang.org/reference/expressions/struct-expr.html
       impl: https://github.com/obi1kenobi/cargo-semver-checks/tree/v0.36.0/src/lints/constructible_struct_adds_field.ron

Failed in:
  field FooterArgs.row_count in /tmp/.tmpCUhGq5/vortex/vortex-flatbuffers/src/./generated/footer.rs:350
  field LayoutArgs.encoding in /tmp/.tmpCUhGq5/vortex/vortex-flatbuffers/src/./generated/footer.rs:221
  field LayoutArgs.buffers in /tmp/.tmpCUhGq5/vortex/vortex-flatbuffers/src/./generated/footer.rs:222
  field LayoutArgs.children in /tmp/.tmpCUhGq5/vortex/vortex-flatbuffers/src/./generated/footer.rs:223
  field LayoutArgs.metadata in /tmp/.tmpCUhGq5/vortex/vortex-flatbuffers/src/./generated/footer.rs:224

--- failure enum_missing: pub enum removed or renamed ---

Description:
A publicly-visible enum cannot be imported by its prior path. A `pub use` may have been removed, or the enum itself may have been renamed or removed entirely.
        ref: https://doc.rust-lang.org/cargo/reference/semver.html#item-remove
       impl: https://github.com/obi1kenobi/cargo-semver-checks/tree/v0.36.0/src/lints/enum_missing.ron

Failed in:
  enum vortex_flatbuffers::footer::NestedLayoutOffset, previously in file /tmp/.tmpnyv9D6/vortex-flatbuffers/src/./generated/footer.rs:217
  enum vortex_flatbuffers::footer::FlatLayoutOffset, previously in file /tmp/.tmpnyv9D6/vortex-flatbuffers/src/./generated/footer.rs:103

--- failure inherent_associated_pub_const_missing: inherent impl's associated pub const removed ---

Description:
An inherent impl's associated public constant is removed or renamed
        ref: https://doc.rust-lang.org/cargo/reference/semver.html#item-remove
       impl: https://github.com/obi1kenobi/cargo-semver-checks/tree/v0.36.0/src/lints/inherent_associated_pub_const_missing.ron

Failed in:
  Layout::VT_LAYOUT_TYPE, previously at /tmp/.tmpnyv9D6/vortex-flatbuffers/src/./generated/footer.rs:347
  Layout::VT_LAYOUT, previously at /tmp/.tmpnyv9D6/vortex-flatbuffers/src/./generated/footer.rs:348

--- failure inherent_method_missing: pub method removed or renamed ---

Description:
A publicly-visible method or associated fn is no longer available under its prior name. It may have been renamed or removed entirely.
        ref: https://doc.rust-lang.org/cargo/reference/semver.html#item-remove
       impl: https://github.com/obi1kenobi/cargo-semver-checks/tree/v0.36.0/src/lints/inherent_method_missing.ron

Failed in:
  Layout::layout_type, previously in file /tmp/.tmpnyv9D6/vortex-flatbuffers/src/./generated/footer.rs:367
  Layout::layout, previously in file /tmp/.tmpnyv9D6/vortex-flatbuffers/src/./generated/footer.rs:374
  Layout::layout_as_flat_layout, previously in file /tmp/.tmpnyv9D6/vortex-flatbuffers/src/./generated/footer.rs:382
  Layout::layout_as_nested_layout, previously in file /tmp/.tmpnyv9D6/vortex-flatbuffers/src/./generated/footer.rs:397
  LayoutBuilder::add_layout_type, previously in file /tmp/.tmpnyv9D6/vortex-flatbuffers/src/./generated/footer.rs:450
  LayoutBuilder::add_layout, previously in file /tmp/.tmpnyv9D6/vortex-flatbuffers/src/./generated/footer.rs:454

--- failure pub_module_level_const_missing: pub module-level const is missing ---

Description:
A public const is missing, renamed, or changed from const to static.
        ref: https://doc.rust-lang.org/cargo/reference/semver.html#item-remove
       impl: https://github.com/obi1kenobi/cargo-semver-checks/tree/v0.36.0/src/lints/pub_module_level_const_missing.ron

Failed in:
  ENUM_MIN_LAYOUT_VARIANT in file /tmp/.tmpnyv9D6/vortex-flatbuffers/src/./generated/footer.rs:13
  ENUM_VALUES_LAYOUT_VARIANT in file /tmp/.tmpnyv9D6/vortex-flatbuffers/src/./generated/footer.rs:18
  ENUM_MAX_LAYOUT_VARIANT in file /tmp/.tmpnyv9D6/vortex-flatbuffers/src/./generated/footer.rs:15

--- failure struct_missing: pub struct removed or renamed ---

Description:
A publicly-visible struct cannot be imported by its prior path. A `pub use` may have been removed, or the struct itself may have been renamed or removed entirely.
        ref: https://doc.rust-lang.org/cargo/reference/semver.html#item-remove
       impl: https://github.com/obi1kenobi/cargo-semver-checks/tree/v0.36.0/src/lints/struct_missing.ron

Failed in:
  struct vortex_flatbuffers::footer::NestedLayoutBuilder, previously in file /tmp/.tmpnyv9D6/vortex-flatbuffers/src/./generated/footer.rs:295
  struct vortex_flatbuffers::footer::LayoutVariantUnionTableOffset, previously in file /tmp/.tmpnyv9D6/vortex-flatbuffers/src/./generated/footer.rs:101
  struct vortex_flatbuffers::footer::FlatLayoutBuilder, previously in file /tmp/.tmpnyv9D6/vortex-flatbuffers/src/./generated/footer.rs:181
  struct vortex_flatbuffers::footer::NestedLayout, previously in file /tmp/.tmpnyv9D6/vortex-flatbuffers/src/./generated/footer.rs:220
  struct vortex_flatbuffers::footer::FlatLayout, previously in file /tmp/.tmpnyv9D6/vortex-flatbuffers/src/./generated/footer.rs:106
  struct vortex_flatbuffers::footer::LayoutVariant, previously in file /tmp/.tmpnyv9D6/vortex-flatbuffers/src/./generated/footer.rs:26
  struct vortex_flatbuffers::footer::NestedLayoutArgs, previously in file /tmp/.tmpnyv9D6/vortex-flatbuffers/src/./generated/footer.rs:281
  struct vortex_flatbuffers::footer::FlatLayoutArgs, previously in file /tmp/.tmpnyv9D6/vortex-flatbuffers/src/./generated/footer.rs:167

--- failure struct_pub_field_missing: pub struct's pub field removed or renamed ---

Description:
A publicly-visible struct has at least one public field that is no longer available under its prior name. It may have been renamed or removed entirely.
        ref: https://doc.rust-lang.org/cargo/reference/semver.html#item-remove
       impl: https://github.com/obi1kenobi/cargo-semver-checks/tree/v0.36.0/src/lints/struct_pub_field_missing.ron

Failed in:
  field layout_type of struct LayoutArgs, previously in file /tmp/.tmpnyv9D6/vortex-flatbuffers/src/./generated/footer.rs:431
  field layout of struct LayoutArgs, previously in file /tmp/.tmpnyv9D6/vortex-flatbuffers/src/./generated/footer.rs:432
```

### ⚠️ `vortex-fastlanes` breaking changes

```
--- failure function_missing: pub fn removed or renamed ---

Description:
A publicly-visible function cannot be imported by its prior path. A `pub use` may have been removed, or the function itself may have been renamed or removed entirely.
        ref: https://doc.rust-lang.org/cargo/reference/semver.html#item-remove
       impl: https://github.com/obi1kenobi/cargo-semver-checks/tree/v0.36.0/src/lints/function_missing.ron

Failed in:
  function vortex_fastlanes::bitpack_patches, previously in file /tmp/.tmpnyv9D6/vortex-fastlanes/src/bitpacking/compress.rs:138
```

### ⚠️ `vortex-expr` breaking changes

```
--- failure function_missing: pub fn removed or renamed ---

Description:
A publicly-visible function cannot be imported by its prior path. A `pub use` may have been removed, or the function itself may have been renamed or removed entirely.
        ref: https://doc.rust-lang.org/cargo/reference/semver.html#item-remove
       impl: https://github.com/obi1kenobi/cargo-semver-checks/tree/v0.36.0/src/lints/function_missing.ron

Failed in:
  function vortex_expr::expr_is_filter, previously in file /tmp/.tmpnyv9D6/vortex-expr/src/lib.rs:23

--- failure struct_missing: pub struct removed or renamed ---

Description:
A publicly-visible struct cannot be imported by its prior path. A `pub use` may have been removed, or the struct itself may have been renamed or removed entirely.
        ref: https://doc.rust-lang.org/cargo/reference/semver.html#item-remove
       impl: https://github.com/obi1kenobi/cargo-semver-checks/tree/v0.36.0/src/lints/struct_missing.ron

Failed in:
  struct vortex_expr::NoOp, previously in file /tmp/.tmpnyv9D6/vortex-expr/src/expr.rs:47

--- failure trait_method_missing: pub trait method removed or renamed ---

Description:
A trait method is no longer callable, and may have been renamed or removed entirely.
        ref: https://doc.rust-lang.org/cargo/reference/semver.html#major-any-change-to-trait-item-signatures
       impl: https://github.com/obi1kenobi/cargo-semver-checks/tree/v0.36.0/src/lints/trait_method_missing.ron

Failed in:
  method estimate_cost of trait VortexExpr, previously in file /tmp/.tmpnyv9D6/vortex-expr/src/expr.rs:28
```

### ⚠️ `vortex-sampling-compressor` breaking changes

```
--- failure struct_missing: pub struct removed or renamed ---

Description:
A publicly-visible struct cannot be imported by its prior path. A `pub use` may have been removed, or the struct itself may have been renamed or removed entirely.
        ref: https://doc.rust-lang.org/cargo/reference/semver.html#item-remove
       impl: https://github.com/obi1kenobi/cargo-semver-checks/tree/v0.36.0/src/lints/struct_missing.ron

Failed in:
  struct vortex_sampling_compressor::ALL_COMPRESSORS, previously in file /tmp/.tmpnyv9D6/vortex-sampling-compressor/src/lib.rs:38

--- failure trait_method_default_impl_removed: pub trait default method impl removed ---

Description:
A method's default impl in an unsealed trait has been removed, breaking trait implementations that relied on that default
        ref: https://doc.rust-lang.org/book/ch10-02-traits.html#default-implementations
       impl: https://github.com/obi1kenobi/cargo-semver-checks/tree/v0.36.0/src/lints/trait_method_default_impl_removed.ron

Failed in:
  trait method vortex_sampling_compressor::compressors::EncodingCompressor::cost in file /tmp/.tmpCUhGq5/vortex/vortex-sampling-compressor/src/compressors/mod.rs:33

--- failure unit_struct_changed_kind: unit struct changed kind ---

Description:
A public unit struct has been changed to a normal (curly-braces) struct, which cannot be constructed using the same struct literal syntax.
        ref: rust-lang/cargo#10871
       impl: https://github.com/obi1kenobi/cargo-semver-checks/tree/v0.36.0/src/lints/unit_struct_changed_kind.ron

Failed in:
  struct BitPackedCompressor in /tmp/.tmpCUhGq5/vortex/vortex-sampling-compressor/src/compressors/bitpacked.rs:23
```

### ⚠️ `vortex-roaring` breaking changes

```
--- failure inherent_method_missing: pub method removed or renamed ---

Description:
A publicly-visible method or associated fn is no longer available under its prior name. It may have been renamed or removed entirely.
        ref: https://doc.rust-lang.org/cargo/reference/semver.html#item-remove
       impl: https://github.com/obi1kenobi/cargo-semver-checks/tree/v0.36.0/src/lints/inherent_method_missing.ron

Failed in:
  RoaringIntArray::bitmap, previously in file /tmp/.tmpnyv9D6/vortex-roaring/src/integer/mod.rs:46
```

### ⚠️ `vortex-runend` breaking changes

```
--- failure module_missing: pub module removed or renamed ---

Description:
A publicly-visible module cannot be imported by its prior path. A `pub use` may have been removed, or the module may have been renamed, removed, or made non-public.
        ref: https://doc.rust-lang.org/cargo/reference/semver.html#item-remove
       impl: https://github.com/obi1kenobi/cargo-semver-checks/tree/v0.36.0/src/lints/module_missing.ron

Failed in:
  mod vortex_runend::runend, previously in file /tmp/.tmpnyv9D6/vortex-runend/src/runend.rs:1

--- failure struct_missing: pub struct removed or renamed ---

Description:
A publicly-visible struct cannot be imported by its prior path. A `pub use` may have been removed, or the struct itself may have been renamed or removed entirely.
        ref: https://doc.rust-lang.org/cargo/reference/semver.html#item-remove
       impl: https://github.com/obi1kenobi/cargo-semver-checks/tree/v0.36.0/src/lints/struct_missing.ron

Failed in:
  struct vortex_runend::runend::RunEndMetadata, previously in file /tmp/.tmpnyv9D6/vortex-runend/src/runend.rs:24
  struct vortex_runend::runend::RunEndArray, previously in file /tmp/.tmpnyv9D6/vortex-runend/src/runend.rs:21
  struct vortex_runend::runend::RunEnd, previously in file /tmp/.tmpnyv9D6/vortex-runend/src/runend.rs:21
  struct vortex_runend::runend::RunEndEncoding, previously in file /tmp/.tmpnyv9D6/vortex-runend/src/runend.rs:21
```

### ⚠️ `vortex-runend-bool` breaking changes

```
--- failure inherent_method_missing: pub method removed or renamed ---

Description:
A publicly-visible method or associated fn is no longer available under its prior name. It may have been renamed or removed entirely.
        ref: https://doc.rust-lang.org/cargo/reference/semver.html#item-remove
       impl: https://github.com/obi1kenobi/cargo-semver-checks/tree/v0.36.0/src/lints/inherent_method_missing.ron

Failed in:
  RunEndBoolArray::find_physical_index, previously in file /tmp/.tmpnyv9D6/vortex-runend-bool/src/array.rs:69
  RunEndBoolArray::offset, previously in file /tmp/.tmpnyv9D6/vortex-runend-bool/src/array.rs:83
  RunEndBoolArray::start, previously in file /tmp/.tmpnyv9D6/vortex-runend-bool/src/array.rs:88
  RunEndBoolArray::ends, previously in file /tmp/.tmpnyv9D6/vortex-runend-bool/src/array.rs:93
  RunEndBoolArray::find_physical_index, previously in file /tmp/.tmpnyv9D6/vortex-runend-bool/src/array.rs:69
  RunEndBoolArray::offset, previously in file /tmp/.tmpnyv9D6/vortex-runend-bool/src/array.rs:83
  RunEndBoolArray::start, previously in file /tmp/.tmpnyv9D6/vortex-runend-bool/src/array.rs:88
  RunEndBoolArray::ends, previously in file /tmp/.tmpnyv9D6/vortex-runend-bool/src/array.rs:93
```

<details><summary><i><b>Changelog</b></i></summary><p>


</p></details>

---
This PR was generated with
[release-plz](https://github.com/MarcoIeni/release-plz/).

Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
S-waiting-on-author Status: The marked PR is awaiting some action (such as code changes) from the PR author.
Projects
None yet
Development

Successfully merging this pull request may close these issues.

5 participants